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 的所有代表物件所需的數據。 SerializationInfo使用Formatter圖形中的物件型別建立 。 需要自行傳送 Proxy 的物件可以使用 FullTypeNameAssemblyName 方法來 SerializationInfo 變更傳輸的資訊。

在類別繼承的情況下,可以串行化衍生自實作 之基類的 ISerializable類別。 在此情況下,衍生類別應該在其 實作內的 基類實作中呼叫 的基類實 GetObjectDataGetObjectData。 否則,將不會串行化基類中的數據。

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

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

串行化架構會處理與 MarshalByRefObject 擴充 Object類型相同的物件類型。 這些類型可以標示為 , SerializableAttribute 並實作 ISerializable 介面做為任何其他物件類型。 其物件狀態將會擷取並保存在數據流上。

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

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

如需擴充 MarshalByRefObject之類別串行化的詳細資訊,請參閱 RemotingSurrogateSelector。 如需實作 ISerializable的詳細資訊,請參閱 自定義串行化

注意

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

給實施者的注意事項

實作這個介面,以允許對象參與自己的串行化和還原串行化。

方法

GetObjectData(SerializationInfo, StreamingContext)
已淘汰.

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

適用於

另請參閱