本章,我們繼續(xù)講解序列化和反序列化的應(yīng)用,之所以把 Json 單獨列一篇有幾個原因:Json 更符合現(xiàn)在人們在生產(chǎn)過程中的需求,體積小,效率高,而且在 Web 項目中基本都是使用 Json 與前端進(jìn)行交互的,因為 Json 本身就是以文本的形式表現(xiàn) javascript 對象的一種形式,其本質(zhì)是一個字符串。在接下來的文章中,我會介紹三種 Json 序列化方式。
1.DataContractJsonSerializer:DataContractJsonSerializer 類幫助我們序列化和反序列化 Json ,他在程序集?System.Runtime.Serialization?下的?System.Runtime.Serialization.Json?命名空間里。

因為 Json 的本身是對對象的字符串表現(xiàn)形式,所以在使用 DataContractJson 序列化器的時候需要在創(chuàng)建序列化器的的同時傳進(jìn)對象類型,而且 DataContractJson 序列化器也只能對實體類對象進(jìn)行操作,不能對 list 對象操作。


可以看出,Json 格式的文本還是比較易讀的,清晰規(guī)范

對比 XML 格式的文檔,Json 雖然也好閱讀,但是卻有一個問題, XML 的標(biāo)簽結(jié)點是可以自定義的,也就意味著如果缺少結(jié)尾節(jié)點是不會有什么大的影響,最多就是不夠規(guī)范,但是 Json 不同,沒有結(jié)點的定義,導(dǎo)致只要出現(xiàn)一點不規(guī)范,就會造成文件無法讀取的現(xiàn)象。
2.JavaScriptJsonSerializer: 通過 JavaScriptSerializer 來實現(xiàn)。它的名字空間為:System.Web.Script.Serialization 如果要使用它,還須添加
System.Web.Extensions 庫文件引用

使用 javascript 序列化器是不需要傳入對象類型的。


3.JSON.NET : 這種方式是通過第三方類庫 newtonsoft.JSON 來實現(xiàn)的,首先我們們需要在 工具 -> NuGet包管理器 -> 解決方案的 NuGet 程序包?中將?newtonsoft.JSON 安裝進(jìn)去,如圖:


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



最后還要說一句的是,以上三種 Json 序列化的方式,從性能方面來講,最好的是 NewTonSoft.Json 的第三方類庫,而微軟本身框架自帶的方式性能卻不及第三方,也是蠻有趣的。