共用方式為


序列化 (C# 和 Visual Basic)

序列化是將物件流程的位元組資料流以儲存物件或傳輸至記憶體、資料庫或檔案。 主要目的是要儲存物件的狀態,以便能在需要時重新建立該物件。 此回復程序稱為還原序列化 (Deserialization)。

以序列化的範例,請參閱本主題稍後的 相關主題和範例

序列化如何運作

此圖例會顯示序列化的整體程序。

序列化圖形

將物件序列化為資料流,不僅會包含資料,還會有物件型別的相關資訊,如物件的版本、文化特性 (Culture) 和組件名稱。 在此資料流中,可以將物件存放在資料庫、檔案或記憶體中。

ms233843.collapse_all(zh-tw,VS.110).gif使用序列化

序列化可以讓開發人員儲存物件的狀態,並依需要重新建立該物件,以提供物件的儲存區和資料交換。 開發人員可以透過序列化執行動作,例如,藉由 Web 服務將物件傳送至遠端應用程式、將物件從一個網域傳遞到另一個網域、透過防火牆 (Firewall) 傳遞物件以做為 XML 字串,或是在不同的應用程式上維護安全性或使用者專屬資訊。

ms233843.collapse_all(zh-tw,VS.110).gif使物件可序列化

若要將物件序列化,首先必須要有準備序列化的物件、能包含序列化物件的資料流,以及 FormatterSystem.Runtime.Serialization 包含將物件序列化和還原序列化所需的類別。

SerializableAttribute 屬性 (Attribute) 套用到型別,以表示此型別的執行個體 (Instance) 可以序列化。 如果您嘗試要序列化,但是型別沒有 SerializableAttribute 屬性,則會擲回 SerializationException 例外狀況。

若您不要類別中的欄位是可序列化的,請套用 NonSerializedAttribute 屬性。 如果可序列化型別的欄位包含指標、控制代碼或其他特定環境專屬的資料結構,而且欄位無法在不同環境中有意義地還原,可能要使該欄位不可序列化。

如果序列化類別包含其他標示為 SerializableAttribute 之類別的物件參考,則這些物件也可以序列化。

二進位和 XML 序列化

您可以使用二進位或 XML 序列化。 在二進位序列化中,所有成員 (即使是唯讀的) 都會加以序列化,而且效能也會增強。 XML 序列化會提供更多可讀取的程式碼,共用物件的更大彈性,以及互通性 (Interoperability) 目的的用途。

ms233843.collapse_all(zh-tw,VS.110).gif二進位序列化

二進位序列化會使用二進位編碼方式,以產生精簡型態的序列化供使用,如儲存區或通訊端 (Socket) 架構的網路資料流。

ms233843.collapse_all(zh-tw,VS.110).gifXML 序列化

XML 序列化會將物件的公用 (Public) 欄位和屬性,或是方法的參數和傳回值,序列化為與特定 XML 結構描述 (Schema) 定義語言 (XSD) 文件相符的 XML 資料流。 XML 序列化會產生強型別類別,其中包含的公用屬性和欄位都轉換為 XML。 System.Xml.Serialization 包含將 XML 序列化和還原序列化所需的類別。

您可以將屬性套用到類別和類別成員,以便控制 XmlSerializer 序列化或還原序列化類別之執行個體的方式。

ms233843.collapse_all(zh-tw,VS.110).gifSOAP 序列化

XML 序列化也可用來將物件序列化為與 SOAP 規格相符的 XML 資料流。 SOAP 是以 XML 為基礎的通訊協定,特別設計來傳輸使用 XML 的程序呼叫。 與標準 XML 序列化相同,屬性可用來控制由 XML Web Service 所產生的常值樣式 SOAP 訊息。

基本和自訂序列化

序列化可以兩種方式執行:基本和自訂。 基本序列化會使用 .NET Framework 自動將物件序列化。

ms233843.collapse_all(zh-tw,VS.110).gif基本序列化

基本序列化的唯一要求是物件已套用 SerializableAttribute 屬性。 您可以使用 NonSerializedAttribute,不讓特定欄位序列化。

使用基本序列化時,物件的版本控制會產生問題,在這種請況下,最好使用自訂序列化。 基本序列化為執行序列化最簡便的方式,但是不會對程序提供很多的控制。

ms233843.collapse_all(zh-tw,VS.110).gif自訂序列化

在自訂序列化中,您可以確實指定要序列化哪些物件,以及如何完成序列化。 類別必須標示為 SerializableAttribute,並實作 ISerializable 介面。

如果您也要以自訂方式還原序列化物件,則必須使用自訂建構函式 (Constructor)。

設計工具序列化

設計工具序列化為特殊格式的序列化,包含通常會與開發工具關聯的物件持續性 (Persistence)。 設計工具序列化為將物件 Graph 轉換為原始程式檔 (Source File) 的程序,稍後可以用於復原物件 Graph。 原始程式檔可以包含程式碼、標記,甚至是 SQL 資料表資訊。 如需詳細資訊,請參閱設計工具序列化概觀

相關主題和範例