序列化(Serialization)概念
Serialization的概念
Serialization是.NET中一種實現物件永續性(Persistent)的機制。它是一個將物件中的資料轉換成一個單一元素(通常是Stream)的過程。它的逆過程是Deserialization。Serialization的核心概念是將一個物件的所有資料看作一個獨立的單元。
一般說來,在兩種情況下非常需要Serialization:1)當我們希望能夠將物件當前的狀態完整地儲存到儲存介質中,以便我們以後能夠精確地還原物件時;2)當我們希望將物件從一個應用程式空間(Application
domain)傳遞到另一個應用程式空間時。例如,Windows Form程式就是利用Serialization機制來實現剪貼簿的copy & paste的。
Serialization的過程
.NET Framework通過Reflection提供自動Serialization的機制。當一個物件被序列化(Serialized)的時候,它的類名,Assembly,以及類例項的所有資料成員都將被寫入儲存介質中。Serialization引擎保持對所有已經被序列化的物件引用的追蹤,以確保相同的物件引用最多隻被序列化一次。
Serialization實現方式
有兩種方式可以使一個class能夠被序列化:1)將此class簡單地標記為Serializable;2)為此class實現ISerializable介面,並將此class標記為Serializable。 如果你不想將類裡的所有域都序列化,可以使用NonSerialized屬性進行選擇。
需要注意的是,Serializable屬性並不能被繼承。也就是說如果你希望Person的派生類也能夠被Serialize的話,那麼這個派生類也必須被Serializable標記。否則將得到SerializationException異常。
簡單說,就是資料通訊時,並不是所有的資料型別都支援的,這時就需要雙方都支援的一種格式,把你的物件轉換成能通訊的格式就是序列化,反之就是反序列化。
舉個例子,你在qq中傳送一段文字加圖片混合的資訊給某人的時候,qq不會提供多個方法分別接收文字和圖片,而是將這段內容資訊賦值給一個物件,然後序列化這個物件為 byte[],然後對這個陣列編碼,加密,壓縮,然後傳輸給另一個客戶端。客戶端收到加密,壓縮,編碼過後的位元組流,也就是byte[] 後,解密,解壓,反序列化得到資訊物件,直接填充到ui介面。