程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 的三種序列化方法

C# 的三種序列化方法

編輯:C#入門知識

  序列化是將一個對象轉換成字節流以達到將其長期保存在內存、數據庫或文件中的處理過程。它的主要目的是保存對象的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。

  序列化一個對象

  為了序列化一個對象,我們需要一個被序列化的對象,一個容納被序列化了的對象的(字節)流和一個格式化器。進行序列化之前我們先看看System.Runtime.Serialization名字空間。ISerializable接口允許我們使任何類成為可序列化的類。

  如果我們給自己寫的類標識[Serializable]特性,我們就能將這些類序列化。除非類的成員標記了[NonSerializable],序列化會將類中的所有成員都序列化。

  序列化的類型

  • 二進制(流)序列化
  • SOAP序列化
  • XML序列化

  二進制(流)序列化:

  二進制(流)序列化是一種將數據寫到輸出流,以使它能夠用來自動重構成相應對象的機制。二進制,其名字就暗示它的必要信息是保存在存儲介質上,而這些必要信息要求創建一個對象的精確的二進制副本。在二進制(流)序列化中,整個對象的狀態都被保存起來,而XML序列化只有部分數據被保存起來。為了使用序列化,我們需要引入System.Runtime.Serialization.Formatters.Binary名字空間. 下面的代碼使用BinaryFormatter類序列化.NET中的string類型的對象。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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類的對象。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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對象。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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裡提供了兩個格式化類:BinaryFormatterSoapFormatter,它們都繼承了IFormatter接口。

  使用序列化

  序列化允許開發人員保存一個對象的狀態並在需要的時候重構對象,同時很好地支持對象存儲和數據交換。通過序列化,開發人員可以利用Web Service發送對象到遠端應用程序,從一個域傳輸對象到另一個域,以XML的格式傳輸一個對象並能通過防火牆,或者在應用程序間保持安全性或用戶特定信息等等。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved