Json和其序列化和反序列化

最近经常在说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的一些简单了解,不正确的地方请指出。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。