C# 的三種序列化方法

來源:互聯網
上載者:User
  序列化是將一個對象轉換成位元組流以達到將其長期儲存在記憶體、資料庫或檔案中的處理過程。它的主要目的是儲存對象的狀態以便以後需要的時候使用。與其相反的過程叫做還原序列化。

  序列化一個對象

  為了序列化一個對象,我們需要一個被序列化的對象,一個容納被序列化了的對象的(位元組)流和一個格式化器。進行序列化之前我們先看看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介面。

  使用序列化

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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.