C 的三種序列化方法

2021-07-26 02:36:09 字數 1992 閱讀 5547

序列化是將乙個物件轉換成位元組流以達到將其長期儲存在記憶體、資料庫或檔案中的處理過程。它的主要目的是儲存物件的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。

為了序列化乙個物件,我們需要乙個被序列化的物件,乙個容納被序列化了的物件的(位元組)流和乙個格式化器。進行序列化之前我們先看看system.runtime.serialization名字空間。iserializable介面允許我們使任何類成為可序列化的類。

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

序列化的型別

二進位制(流)序列化:

二進位制(流)序列化是一種將資料寫到輸出流,以使它能夠用來自動重構成相應物件的機制。二進位制,其名字就暗示它的必要資訊是儲存在儲存介質上,而這些必要資訊要求建立乙個物件的精確的二進位制副本。在二進位制(流)序列化中,整個物件的狀態都被儲存起來,而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

}}

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

}}

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

}}

什麼是格式化器?

乙個格式化器用來確定乙個物件的序列格式。它們目的是在網路上傳輸乙個物件之前將其序列化成合適的格式。它們提供iformatter介面。在.net裡提供了兩個格式化類:binaryformatter和soapformatter,它們都繼承了iformatter介面。

使用序列化

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

C 的三種序列化方法

序列化是將乙個物件轉換成位元組流以達到將其長期儲存在記憶體 資料庫或檔案中的處理過程。它的主要目的是儲存物件的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。為了序列化乙個物件,我們需要乙個被序列化的物件,乙個容納被序列化了的物件的 位元組 流和乙個格式化器。進行序列化之前我們先看看syst...

C 的三種序列化方法

序列化是將乙個物件轉換成位元組流以達到將其長期儲存在記憶體 資料庫或檔案中的處理過程。它的主要目的是儲存物件的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。為了序列化乙個物件,我們需要乙個被序列化的物件,乙個容納被序列化了的物件的 位元組 流和乙個格式化器。進行序列化之前我們先看看syst...

C 的三種序列化方法

序列化是將乙個物件轉換成位元組流以達到將其長期儲存在記憶體 資料庫或檔案中的處理過程。它的主要目的是儲存物件的狀態以便以後需要的時候使用。與其相反的過程叫做反序列化。為了序列化乙個物件,我們需要乙個被序列化的物件,乙個容納被序列化了的物件的 位元組 流和乙個格式化器。進行序列化之前我們先看看syst...