序列化 (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...