C 學習筆記25 序列化和反序列化

2021-10-03 17:07:35 字數 2019 閱讀 2222

序列化 (serialization)是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程,序列把物件轉換成有序位元組流,以便在網路上傳輸或者儲存在本地檔案中

序列化的主要目的有三個:

1)以某種儲存形式使自定義物件持久化;

2)將物件從乙個地方傳遞到另乙個地方;

3)使程式更具維護。

對於需要序列化的物件,需要在類前面宣告[serializable],表示其可序列化,其語法格式如下所示:

[

serializable

]//表示類可以序列化

public

class

person

public

string gender

string _gender;

}

反序列化指把位元組序列恢復為物件的過程,即將二進位制轉化為物件,客戶端從檔案中或網路上獲得序列化後的物件位元組流後,根據位元組流中所儲存的物件狀態及描述資訊,通過反序列化重建物件

序列化和反序列化的過程如下所示:

static

void

main

(string

args)

console.

writeline

("序列化成功");

//接受對方傳送過來的二進位制 反序列化成物件

person p;

using

(filestream fsread =

newfilestream

(@"c:\users\91134\desktop\new.txt"

, filemode.openorcreate, fileaccess.read)

) console.

writeline

("反序列化成功");

console.

writeline

(p.name)

; console.

writeline

(p.gender)

;

console.

readkey()

;}

序列化與反序列化重要是利用serialize、deserialize兩個方法,而在.net framework的類庫中提供了三個可以用於序列化和反序列化的類,分別為binaryformatter、soapformatter和xmlserializer,這三種類物件都可呼叫序列化和反序列的方法進行操作。

binaryformatter可以對單個物件,或集合物件(如list、observablecollection)進行序列化。

需要指出的是,需要對被序列化的物件新增[serializable]特性,也就是我們上述提到的格式

xmlserializer,無論對於單個物件還是集合物件(如list、observablecollection),都可以使用xmlserializer進行序列化。需要指出的是,不需要對被序列化的物件新增[serializable]特性註解。但是,使用xmlseriabizable的時候,被序列化的物件應該具有無引數建構函式

而soapformatter現在基本被淘汰,不被使用了,用法與binaryformatter類似

序列化步驟:

1.得到乙個儲存物件的型別

2.建立乙個寫入檔案流

3.定義要序列化的型別

4.呼叫序列化方法

反序列化步驟:

1.定義乙個裝載物件的型別

2.建立乙個讀出檔案流

3.定義要反序列化的型別

4.呼叫反序列化方法

二進位制序列化的優點:

1. 所有的類成員(包括唯讀的)都可以被序列化;

2. 效能非常好。

xml序列化的優點:

1. 互操作性好;

2. 不需要嚴格的二進位制依賴;

3. 可讀性強

1、c# 序列化binaryformatter、soapformatter和xmlserializer的區別

2、序列化和反序列化

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

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

C 基礎學習08(序列化和反序列化)

1.引用命名空間 using system.runtime.serialization.formatters.binary 引入命名空間2.類必須是可序列化的 serializable 使此類可序列化 public class person set private string gender pub...

C 序列化和反序列化

binaryserialize serialize new binaryserialize book book serialize.deserialize book.write 3 測試用的 binaryserialize類 using system using system.collections...