Json和其序列化和反序列化

来源:互联网 发布:人工智能算法有哪些 编辑:程序博客网 时间:2024/05/12 14:32

最近经常在说Json传值,Json序列化,什么是Json?什么又是Json的序列化和反序列化?

什么是 JSON ?

大家是否知道Json的全称?—JavaScript Object Notation(JavaScript 对象表示法),说白了Json就是一种字符串,一种带有格式的字符串,一种可读性很强,操作方便的字符串。因为Json字符串存储信息的方式和hashtable,Dictionary一样都是键值对的形式。

Json的结构很简单,也很复杂。简单是因为Json的结构只有两种:对象和数组。

对象和数组大家都很熟悉,在JS中对象的表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 “对象.key” 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [” 数值1”,”数值2”,”数值3”,…],取值方式和其他语言中一样,使用索引获取,字段值的类型和上面对象的属性值一样,可以是 数字、字符串、数组、对象几种。

说Json结构复杂是因为:Json可以通过对象、数组这2种结构的组合,从而形成任何复杂的数据结构。

Json实例:

{     "学生":     [         {"姓名":"小明","年龄":23},        {"姓名":"大憨","年龄":24}    ] } 

上面这个Json对象,包含一个名为学生的数组,数组中的每条记录又是一个Json对象。对象有两个属性分别为:姓名和年龄。这就是一个既包含数组也包含对象的Json实例

说道Json是作为一种存储和交换文本信息的语法,这使我不得不想到XML。因为XML在这方面也是高手。他们有什么异同呢?

相同之处,他们都是纯文本,且有一定的格式都够保存传输数据,可以用JS来对其进行解析。不同之处在于,Json没有结束标签,格式相对简单,能够使用内建的 JavaScript eval() 方法进行解析。

除了上述之外,JSON和XML还有另外一个很大的区别在于有效数据率。JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力 。

Json的序列化和反序列化

这里的序列化主要就是为了传输方便,将要传输的对象序列化为二进制的数据流,效率极高,接收时通过反序列化转化成对象,从而达到一个传输的效果。简单点来说,序列化就是将对象转换成Json格式的字符串,反序列化就是逆过程,将Json串转换成对象。

实例

JS代码:建立学生对象数组

var stucheck = [ {"姓名":"小明","年龄":23},{"姓名":"大憨","年龄":24}]  //用stringify函数将对象stucheck序列化,提交到后台,增加分享记录                    $.ajax({                        type: "POST",                        url: "/VideoPlayer/AddVideoShareRecordList",                        data: { stuList: JSON.stringify(stucheck) },                        success: function (data) {                            if (data == true) {                                alert("分享视频成功!");                            } else {                                alert("分享失败,请检查网络!");                            }                        }                    });

后台解析:

        public bool AddStuRecordList()        {//获取Json串            string stuList = Request["stuList"];//声明一个学生的实体集合            List<StuRecord> stuAddList = new List<StuRecord>();           //声明一个servializer 类用来完成Json的反序列化            JavaScriptSerializer servializer = new JavaScriptSerializer();//完成Json的反序列化            stuAddList = servializer.Deserialize<List<StuRecord>>(stuList);            bool isok = AddRecordList(stuAddList);            return isok;        }

注意:JS中的对象和后台中的对象应该保持一致,才能完全转换。在后台进行序列化和反序列化需要引入插件,JavaScriptSerializer 或者 Newtonsoft.Json.JsonConvert,添加引用即可。

以上就是对Json的一些简单了解,不正确的地方请指出。

1 0
原创粉丝点击