天天看點

C# 序列化、反序列化

剛剛碰巧群裡有人問這個問題,而之前的部落格中并沒有提及,打算弄一篇部落格簡單提及一下這個知識點。

MSDN文檔中提及了序列化、反序列化的概念,這裡引用一下。

序列化:将對象狀态轉換為可保持或傳輸的形式的過程。

反序列化:是序列化的逆過程,就是将流轉換為對象的過程。

這兩個過程一起保證資料易于傳輸和存儲。

下面直接給出完整的代碼,該代碼示範了如何序列化一個對象以及反序列化(還原對象)的過程。

運作結果截圖:

C# 序列化、反序列化

XML序列化

示例:用XmlSerializer序列化一個學生對象。

如果程式沒有發生異常,則可以在控制台項目bin\Debug目錄下檢視生成的張三.xml檔案内容。

XML反序列化

示例:将上個例子中生成的張三.xml檔案反序列化為C#中的張三對象。

JSON序列化

Ø  JavaScriptSerializer

使用JavaScriptSerializer需要在項目中添加引用System.Web.Extensions,然後引用命名空間System.Web.Script.Serialization。

示例:使用JavaScriptSerializer将張三對象序列化為JSON字元串

Ø  DataContractJsonSerializer

使用DataContractJsonSerializer需要在項目中添加引用System.Runtime.Serialization,然後引用命名空間System.Runtime.Serialization.Json。

示例:使用DataContractJsonSerializer将張三對象序列化為JSON字元串

序列化完成後,可以在項目的bin/Debug目錄下看到生成的張三.json檔案。用notepad++等文本編輯器打開可以看到生成的json内容。

張三.json檔案内容:

{"Address":"中國","Name":"張三","Phone":"13012345678","Sex":1}

Ø  Json.NET

示例:使用Json.NET需要添加引用Newtonsoft.Json,可以通過nuget線上安裝或者直接下載下傳Newtonsoft.Json開發包添加引用。

通過nuget線上安裝示意圖

點選界面右側的安裝按鈕,進行安裝。安裝成功後,會在VS輸出視窗看到安裝過程。

安裝完畢後,會為我們的控制台項目預設添加Newtonsoft.Json引用。

示例:使用Json.NET序列化張三對象為Json字元串

可以看到輸出結果中,Sex的值為1,并不是之前的Male。這是由于Json.NET在處理枚舉時會預設将枚舉元素的值輸出。可以通過給枚舉添加屬性聲明的方式輸出枚舉元素的名稱。

将Student類修改如下:

引用StringEnumConverter類需要添加Newtonsoft.Json.Converters命名空間。通過如上的修改輸出序列化JSON字元串時會得到枚舉的名稱。

JSON反序列化

示例:使用JavaScriptSerializer将張三序列化生成的JSON字元串反序列化為張三對象

示例:使用DataContractJsonSerializer将張三.json檔案反序列化為張三對象。

示例:将張三的JSON字元串反序列化為張三對象