進階之路—序列化及反序列化二進位制、Soap、XML篇
在程式設計中我們時常聽到序列化和反序列化這兩個詞,但是對於一些剛入門的新手來講,序列化和反序列化是什麼東西,又不得而知,其實序列化和反序列化並沒有我們相像的那麼複雜和困難。舉個例子:
上圖應該很清晰了,假如我們在傳輸的過程中,想要把一個實體物件 A 傳給 b 這臺機器,但是傳送的管道過小,沒辦法將 A整體傳過去,那麼我們先將 A 打碎,然後傳過去之後在進行重組,打碎的過程就叫做序列化,重組的過程就叫做反序列化。
序列化和反序列化在 C# 中可以通過多種方式實現,格式不同,生成的檔案大小也各不相同,當前比較流行的格式有以下幾種:Soap, XML , Json , 二進位制。接下來我們就一起探究一下以上幾種格式序列化的方法以及優劣性。
首先是二進序列化的方式:物件序列化之後是二進位制格式的,通過 BinaryFormatter 類實現,該類位於 System.Runtime.Serialization.Formatters.Binary 名稱空間下。
我們新建一個空的解決方案,在解決方案中分別填加以下控制檯程式:BinarySerialize ,JsonSerialize ,SoapSerialize ,XmlSerialize 以及 Model 類庫。
首先進行 Model 中實體物件的建立:
需要注意,想要使用序列化器對這個類生成的物件序列化,需要在這個類上標識一個特性 [ Serializable ]
[ Serializable ]:表示標識的類是可以被序列化的。
接下來在 BinarySerialize 控制檯程式下,我們新增以下程式碼:
以上程式碼中,我們通過讀寫流的方式,在電腦D盤建立了一個檔案,並將序列化之後的物件傳入到該檔案中去,之後又將檔案中的二進位制內容取出反序列化成一個物件實體。
我們可以看到,這樣序列化就成功了,因為是二進位制的格式,所以很難讀懂。
而接下來的反序列化也沒有讓我們失望,成功的將檔案流中的二進位制片段轉換成了實體物件。
Soap 序列化器進行序列化:物件序列化之後的結果符合 Soap 協議,也就是可以通過 Soap 協議傳輸,通過 System.Runtime.Serialization.Formatters.Soap 名稱空間下的 SoapFormatte r類來實現的。
以下是 Soap 序列化的後臺程式碼:
可以看出,跟二進位制的程式碼基本是一樣的,區別在於呼叫的序列化器不同並且需要注意的是 Soap 序列化器不支援序列化泛型所以要在實體物件後後面 toArray() 一下,將其裝換成陣列。接下來我們執行試一試。
上面兩張圖證明我們已經成功的序列化以及反序列化除了這個物件,而生成的檔案開啟之後我們發現,雖然不好閱讀,但是也能找到我們需要的資料。
XML序列化:物件序列化之後的結果是 XML形式的,通過 XmlSerializer 類來實現的,該類位於 System.Xml.Serialization 名稱空間下。XML序列化不能序列化私有資料。
上面 XML 序列化的程式碼與二進位制和 Soap 的相差不大,除了序列化器名稱不一樣之外還需注意的是, XML 序列化器在建立的時候需要給其指定物件型別。
上面兩張圖證明了我們程式碼是可以成功執行的,而且 XML 格式的檔案可讀性要比另外兩種好的太多了。
相關文章
- [.net 物件導向程式設計進階] (9) 序列化(Serialization) (一) 二進位制流序列化物件程式設計
- 二進位制反碼求和
- .NET進階篇04-Serialize序列化、加密解密加密解密
- python進位制轉換(二進位制、十進位制和十六進位制)及注意事項Python
- [.net 物件導向程式設計進階] (11) 序列化(Serialization)(三) 通過介面 IXmlSerializable 實現XML序列化 及 通用XML類物件程式設計XML
- [.net 物件導向程式設計進階] (10) 序列化(Serialization)(二) 通過序列化部落格園文章學習XML的序列化物件程式設計XML
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 二進位制與二進位制運算
- 效能超四倍的高效能.NET二進位制序列化庫
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 十進位制——二 (八、十六 )進位制
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- (二進位制)
- 二進位制
- 二進位制、十進位制與十六進位制相互轉化
- React 進階之路(二)React
- 二進位制轉十進位制快速方法
- 理解二進位制原碼、反碼、補碼
- 二進位制的原碼、反碼、補碼
- 序列化篇 生成xml 以及讀取xmlXML
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- 深入認識二進位制序列化--記一次生產事故的思考
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 什麼是二進位制?二進位制如何轉換?
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- JavaScript十進位制轉換為二進位制JavaScript
- Oracle二進位制與十進位制轉換Oracle
- 十進位制轉二進位制推導(草稿)
- 04 二進位制
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回