ISerializable 介面

定義

允許物件透過二進位和 XML 序列化來控制自己的序列化和還原序列化。

public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
衍生
屬性

備註

任何可能使用二進位或 XML 序列化序列化的類別都必須以 SerializableAttribute 標示。 如果類別需要控制其二進位或 XML 序列化程式,它可以實作 ISerializable 介面。 會在 Formatter 序列化時間呼叫 GetObjectData ,並填入提供 SerializationInfo 的所有資料來表示物件。 會 FormatterSerializationInfo 圖形中的 物件型別建立 。 需要自行傳送 Proxy 的物件可以使用 FullTypeNameAssemblyName 方法來 SerializationInfo 變更傳輸的資訊。

在類別繼承的情況下,可以序列化衍生自實作 的基類的 ISerializable 類別。 在此情況下,衍生類別應該在其 的 實作內呼叫 的 GetObjectData 基類實作 GetObjectData 。 否則,將不會序列化基類中的資料。

介面 ISerializable 表示具有簽章 的建構函式 constructor (SerializationInfo information, StreamingContext context) 。 在還原序列化時,只有在 格式子還原序列化 中的 SerializationInfo 資料之後,才會呼叫目前的建構函式。 一般而言,如果 類別不是 sealed ,則此建構函式應該是 protected

無法保證還原序列化物件的順序。 例如,如果某個類型參考尚未還原序列化的型別,就會發生例外狀況。 如果您要建立具有這類相依性的型別,您可以實 IDeserializationCallback 作 介面和 OnDeserialization 方法來解決問題。

序列化架構會處理與擴充 MarshalByRefObjectObject 之類型相同的物件類型。 這些型別可以使用 標記 SerializableAttribute ,並實作 ISerializable 介面做為任何其他物件類型。 其物件狀態會擷取並保存在資料流程上。

透過 使用這些 System.Runtime.Remoting 型別時,遠端基礎結構會提供代理,其會優先處理一般序列化,並改為將 Proxy 序列化至 MarshalByRefObject 。 Surrogate 是協助程式,知道如何序列化和還原序列化特定類型的物件。 在大部分情況下,使用者看不到 Proxy 的類型為 ObjRef

做為一般設計模式,類別會以可序列化屬性標示並延伸 MarshalByRefObject 。 開發人員在結合這兩個特性時,應該仔細考慮可能的序列化和遠端案例。 其中一個可能適用的範例是 使用 MemoryStream 。 雖然 (StreamMemoryStream 基類) 從 MarshalByRefObject 延伸,但可以擷取 的狀態 MemoryStream ,並依序還原狀態。 因此,將這個資料流程的狀態序列化為資料庫,並在稍後的時間點還原它可能有意義。 不過,透過遠端處理使用時,此類型的物件會進行 Proxy 處理。

如需擴充 MarshalByRefObject 之類別序列化的詳細資訊,請參閱 RemotingSurrogateSelector 。 如需實作 ISerializable 的詳細資訊,請參閱 自訂序列化

注意

此介面不適用於使用 的 System.Text.Json JSON 序列化。

給實施者的注意事項

實作這個介面,讓物件參與其本身的序列化和還原序列化。

方法

GetObjectData(SerializationInfo, StreamingContext)
已過時。

將序列化目標物件所需的資料填入 SerializationInfo

適用於

另請參閱