12 序列化與反序列篇

2022-03-09 14:39:13 字數 1572 閱讀 2447

1.物件序列化的介紹

1.net支援物件序列化的幾種方式

二進位制序列化:物件序列化之後是二進位制形式的,通過binaryformatter類來實現的,這個類位於system.runtime.serialization.formatters.binary命名空間下。

soap序列化:物件序列化之後的結果符合soap協議,也就是可以通過soap 協議傳輸,通過system.runtime.serialization.formatters.soap命名空間下的soapformatter類來實現的。

xml序列化:物件序列化之後的結果是xml形式的,通過xmlserializer 類來實現的,這個類位於system.xml.serialization命名空間下。xml序列化不能序列化私有資料。

2.幾種序列化的區別

二進位制格式和soap格式可序列化乙個型別的所有可序列化字段,不管它是公共字段還是私有字段。xml格式僅能序列化公共欄位或擁有公共屬性的私有字段,未通過屬性公開的私有欄位將被忽略。

使用二進位制格式序列化時,它不僅是將物件的字段資料進行持久化,也持久化每個型別的完全限定名稱和定義程式集的完整名稱(包括包稱、版本、公鑰標記、區域性),這些資料使得在進行二進位制格式反序列化時亦會進行型別檢查。soap格式序列化通過使用xml命名空間來持久化原始程式集資訊。而xml格式序列化不會儲存完整的型別名稱或程式集資訊。這便利xml資料表現形式更有終端開放性。如果希望盡可能延伸持久化物件圖的使用範圍時,soap格式和xml格式是理想選擇。

3使用特性對序列化的控制

要讓乙個物件支援.net序列化服務,使用者必須為每乙個關聯的類加上[serializable]特性。如果類中有些成員不適合參與序列化(比如:密碼字段),可以在這些域前加上[nonserialized]特性。

2.使用二進位制序列化和反序列化**事例

[serializable]  //

必須新增序列化特性

public

class

person

public

override

string

tostring()

}[serializable]

//必須新增序列化特性

public

class

programmer : person

public

override

string

tostring()

}class

program

console.read();

}}

(2)總結

soap序列化與二進位制序列化的區別是:soap序列化不能序列化泛型型別。與二進位制序列化一樣在序列化時不需要向序列化器指定序列化物件的型別。而xml序列化需要向xml序列化器指定序列化物件的型別。

詳細原創:

其他見解:

經典理解:

A08 序列化與反序列化

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace a01 serializeanddeserialize s...

C 語言 08 序列化與反序列化

a.序列化 是將物件的狀態儲存到特定儲存介質中的過程 i.語法 public void serialize 序列化過程的檔案流,儲存的物件 b.返序列化 是從特定儲存介質中將資料重新構建物件的過程 i.語法 public object deserialize 檔案流 i.注意 deserialize...

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...