本章,我们继续讲解序列化和反序列化的应用,之所以把 Json 单独列一篇有几个原因:Json 更符合现在人们在生产过程中的需求,体积小,效率高,而且在 Web 项目中基本都是使用 Json 与前端进行交互的,因为 Json 本身就是以文本的形式表现 javascript 对象的一种形式,其本质是一个字符串。在接下来的文章中,我会介绍三种 Json 序列化方式。
1.DataContractJsonSerializer:DataContractJsonSerializer 类帮助我们序列化和反序列化 Json ,他在程序集 System.Runtime.Serialization 下的 System.Runtime.Serialization.Json 命名空间里。

因为 Json 的本身是对对象的字符串表现形式,所以在使用 DataContractJson 序列化器的时候需要在创建序列化器的的同时传进对象类型,而且 DataContractJson 序列化器也只能对实体类对象进行操作,不能对 list 对象操作。


可以看出,Json 格式的文本还是比较易读的,清晰规范

对比 XML 格式的文档,Json 虽然也好阅读,但是却有一个问题, XML 的标签结点是可以自定义的,也就意味着如果缺少结尾节点是不会有什么大的影响,最多就是不够规范,但是 Json 不同,没有结点的定义,导致只要出现一点不规范,就会造成文件无法读取的现象。
2.JavaScriptJsonSerializer: 通过 JavaScriptSerializer 来实现。它的名字空间为:System.Web.Script.Serialization 如果要使用它,还须添加
System.Web.Extensions 库文件引用

使用 javascript 序列化器是不需要传入对象类型的。


3.JSON.NET : 这种方式是通过第三方类库 newtonsoft.JSON 来实现的,首先我们们需要在 工具 -> NuGet包管理器 -> 解决方案的 NuGet 程序包 中将 newtonsoft.JSON 安装进去,如图:


安装之后我们只需要在程序中引用 Newtonsoft.Json 命名空间就可以使用了。



最后还要说一句的是,以上三种 Json 序列化的方式,从性能方面来讲,最好的是 NewTonSoft.Json 的第三方类库,而微软本身框架自带的方式性能却不及第三方,也是蛮有趣的。
网友评论