共用方式為


序列化 (Visual Basic)

序列化程序會將物件轉換成位元組資料流,以將物件儲存或傳輸到記憶體、資料庫或檔案。 其主要目的是儲存物件的狀態,這樣就能在需要時重新建立該物件。 反向的程序則稱為還原序列化。

序列化的運作方式

下圖顯示序列化的整體程序。

Serialization graphic

物件會序列化成資料流,且其中不只包含資料,還有物件型別 (版本、文化特性及組件名稱) 的資訊。 而該資料流可以儲存在資料庫、檔案或記憶體中。

序列化的用法

序列化讓開發人員能夠儲存物件的狀態,並在需要時重新建立它,因此提供儲存物件及交換資料的功能。 藉由序列化,開發人員可以執行的動作如下:透過 Web 服務將物件傳送到遠端應用程式、將物件從一個網域傳遞到另一個網域、將物件以 XML 字串傳遞通過防火牆,或是跨應用程式維護安全性或使用者專屬資訊。

JSON 序列化

System.Text.Json 命名空間包含 JavaScript 物件標記法 (JSON) 序列化和還原序列化的類別。 JSON 是開放標準,通常用於在網路上共用資料。

JSON 序列化會將物件的公用屬性序列化為符合 RFC 8259 JSON 規格的字串、位元組陣列或串流。 若要控制 JsonSerializer 序列化或還原序列化類別執行個體的方式,您可以使用下列一或多個方法:

二進位與 XML 序列化

System.Runtime.Serialization 命名空間包含二進位和 XML 序列化和還原序列化的類別。

在二進位序列化中,系統會序列化所有成員 (即使是唯讀的成員),且效能會增強。 XML 序列化提供可讀性較高的程式碼,也會基於互通性目的為物件共用和使用方式提供更大的彈性。

警告

使用 BinaryFormatter 進行二進位序列化可能很危險。 如需詳細資訊,請參閱 BinaryFormatter 安全性指南

讓物件可序列化

若要使用二進位或 XML 序列化程序將物件序列化,您需要一個要序列化的物件、可包含序列化物件的資料流,以及 FormatterSystem.Runtime.Serialization 包含序列化及還原序列化物件所需的類別。

SerializableAttribute 屬性套用至某個類型,以表示此類型的執行個體為可序列化。 如果您嘗試序列化但該類型沒有 SerializableAttribute 屬性,則會擲回 SerializationException 例外狀況。

如果您不要將類別中的某個欄位序列化,請套用 NonSerializedAttribute 屬性。 如果可序列化型別的欄位包含指標、控制代碼,或一些其他特定環境專屬的資料結構,且無法以有意義的方式在不同環境中重新建構該欄位,則您可能想要讓它成為不可序列化的。

如果序列化類別包含對其他類別之物件的參考,且該類別標記為 SerializableAttribute,則系統也會將那些物件序列化。

二進位序列化

二進位序列化使用二進位編碼來產生精簡的序列化,適用於儲存或通訊端型網路資料流。

XML 序列化

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

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

基本和自訂序列化

有兩種方式可以執行二進位和 XML 序列化:基本和自訂。 基本序列化使用 .NET 來自動序列化物件。

基本序列化的唯一需求是物件已套用 SerializableAttribute 屬性。 可以使用 NonSerializedAttribute 來防止特定欄位被序列化。

如果使用基本序列化,物件的版本控制可能會產生問題,這種情況則較適合使用自訂序列化。 基本序列化是執行序列化最簡單的方式,但它對該程序提供的控制機制並不多。

在自訂序列化中,您可以明確指定要序列化的物件,以及序列化的方式。 類別必須標記為 SerializableAttribute 並實作 ISerializable 介面。 如果您也想讓物件以自訂方式還原序列化,就必須使用自訂建構函式。

設計工具序列化

設計工具序列化是特殊格式的序列化,其中包含一種通常與開發工具相關聯的物件持續性。 設計工具序列化程序的作用是將物件圖形轉換成來源檔案,而該檔案稍後可用於復原物件圖形。 來源檔案可以包含程式碼、標記,或甚至 SQL 資料表資訊。

相關文章

如何:從 XML 檔案讀取物件資料 (Visual Basic)
示範如何讀取先前使用 XmlSerializer 類別來寫入 XML 檔案的物件資料。

如何:將物件資料寫入 XML 檔案 (Visual Basic)
示範如何使用 XmlSerializer 類別,將來自某個類別的物件寫入 XML 檔案。