C# 的三種序列化方法
序列化是將一個物件轉換成位元組流以達到將其長期儲存在記憶體、資料庫或檔案中的處理過程。它的主要目的是儲存物件的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。
序列化一個物件
為了序列化一個物件,我們需要一個被序列化的物件,一個容納被序列化了的物件的(位元組)流和一個格式化器。進行序列化之前我們先看看System.Runtime.Serialization名字空間。ISerializable介面允許我們使任何類成為可序列化的類。
如果我們給自己寫的類標識[Serializable]特性,我們就能將這些類序列化。除非類的成員標記了[NonSerializable],序列化會將類中的所有成員都序列化。
序列化的型別
- 二進位制(流)序列化
- SOAP序列化
- XML序列化
二進位制(流)序列化:
二進位制(流)序列化是一種將資料寫到輸出流,以使它能夠用來自動重構成相應物件的機制。二進位制,其名字就暗示它的必要資訊是儲存在儲存介質上,而這些必要資訊要求建立一個物件的精確的二進位制副本。在二進位制(流)序列化中,整個物件的狀態都被儲存起來,而XML序列化只有部分資料被儲存起來。為了使用序列化,我們需要引入System.Runtime.Serialization.Formatters.Binary名字空間. 下面的程式碼使用BinaryFormatter類序列化.NET中的string型別的物件。
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace SerializationTest { class Program { static void Main(string[] args) { //Serialization of String Object string strobj = "test string for serialization"; FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write , FileShare.None); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, strobj); stream.Close(); //Deserialization of String Object FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read , FileShare.Read ); string readdata = (string)formatter.Deserialize(readstream); readstream.Close(); Console.WriteLine(readdata); Console.ReadLine(); } } }
SOAP序列化:
SOAP協議是一個在異構的應用程式之間進行資訊互動的理想的選擇。我們需要在應用程式中新增System.Runtime.Serialization.Formatters.Soap名字空間以便在.Net中使用SOAP序列化。SOAP序列化的主要優勢在於可移植性。SoapFormatter把物件序列化成SOAP訊息或解析SOAP訊息並重構被序列化的物件。下面的程式碼在.Net中使用SoapFormatter類序列化string類的物件。
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap ; namespace SerializationTest { class Program { static void Main(string[] args) { //Serialization of String Object string strobj = "test string for serialization"; FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write , FileShare.None); SoapFormatter formatter = new SoapFormatter(); formatter.Serialize(stream, strobj); stream.Close(); //Deserialization of String Object FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read , FileShare.Read ); string readdata = (string)formatter.Deserialize(readstream); readstream.Close(); Console.WriteLine(readdata); Console.ReadLine(); } } }
XML序列化:
根據MSDN的描述,“XML序列化將一個物件或引數的公開欄位和屬性以及方法的返回值轉換(序列化)成遵循XSD文件標準的XML流。因為XML是一個開放的標準,XML能被任何需要的程式處理,而不管在什麼平臺下,因此XML序列化被用到帶有公開的屬性和欄位的強型別類中,它的這些發生和欄位被轉換成序列化的格式(在這裡是XML)儲存或傳輸。”
我們必須新增System.XML.Serialization引用以使用XML序列化。使用XML序列化的基礎是XmlSerializer。下面的程式碼是在.Net中使用XmlSerializer類序列化string物件。
using System; using System.IO; using System.Xml.Serialization; namespace SerializationTest { class Program { static void Main(string[] args) { //Serialization of String Object string strobj = "test string for serialization"; FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write , FileShare.None); XmlSerializer xmlserializer = new XmlSerializer(typeof(string)); xmlserializer.Serialize(stream, strobj); stream.Close(); //Deserialization of String Object FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read , FileShare.Read ); string readdata = (string)xmlserializer.Deserialize(readstream); readstream.Close(); Console.WriteLine(readdata); Console.ReadLine(); } } }
什麼是格式化器?
一個格式化器用來確定一個物件的序列格式。它們目的是在網路上傳輸一個物件之前將其序列化成合適的格式。它們提供IFormatter介面。在.NET裡提供了兩個格式化類:BinaryFormatter和SoapFormatter,它們都繼承了IFormatter介面。
使用序列化
序列化允許開發人員儲存一個物件的狀態並在需要的時候重構物件,同時很好地支援物件儲存和資料交換。通過序列化,開發人員可以利用Web Service傳送物件到遠端應用程式,從一個域傳輸物件到另一個域,以XML的格式傳輸一個物件並能通過防火牆,或者在應用程式間保持安全性或使用者特定資訊等等。
相關文章
- C# 三種序列化C#
- C# 讀取EXCEL檔案的三種經典方法C#Excel
- PHP序列化變數的3種方法PHP變數
- C# Winform WCF 除錯服務端的程式(三種方法)C#ORM除錯服務端
- C#實現Winform間的資料互動的三種方法C#ORM
- C#在Winform中改變Textbox高度三種方法C#ORM
- 改善C#程式的50種方法C#
- c#序列化C#
- 三種觀察者模式的C#實現模式C#
- Go 中的三種排序方法Go排序
- js解析url的三種方法JS
- CSS的三種使用方法CSS
- 三種交換變數的方法變數
- React(update the UI的三種方法)ReactUI
- php重定向的三種方法PHP
- 程式碼注入的三種方法
- C#中物件的序列化與反序列化C#物件
- C#中的物件序列化C#物件
- C# 類對映的四種方法【解決硬編碼的問題】(工具三)C#
- C#三種模擬自動登入和提交POST資訊的實現方法C#
- C#去除字串空格的幾種方法收藏C#字串
- C# @符號的多種使用方法C#符號
- C#拼接Json串的幾種方法C#JSON
- 修復weblogic的JAVA反序列化漏洞的多種方法WebJava
- 關於C#委託三種呼叫的分享C#
- C#中陣列的三種訪問方式C#陣列
- C# 序列化(總)C#
- c#序列化與反序列化概述C#
- 對C# 2.0中匿名方法的種種懷疑分析(轉)C#
- 代理IP檢測的三種方法
- 改變IP地址的三種方法
- 驗證代理IP的三種方法
- 隱藏IP地址的三種方法
- Activiti獲取ProcessEngine的三種方法
- Java中三種常用的排序方法Java排序
- 解析Json字串的三種方法JSON字串
- 純程式碼Autolayout的三種方法
- vsftpd的三種實現方法FTP