ISerializable 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
允許物件透過二進位和 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 的物件可以使用 FullTypeName 和 AssemblyName 方法來 SerializationInfo 變更傳輸的資訊。
在類別繼承的情況下,可以串行化衍生自實作 之基類的 ISerializable類別。 在此情況下,衍生類別應該在其 實作內的 基類實作中呼叫 的基類實 GetObjectData 作 GetObjectData。 否則,將不會串行化基類中的數據。
介面 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可能適用的範例是 搭配 。 雖然 (Stream 的MemoryStream基類) 會從 MarshalByRefObject延伸,但可以擷取 的狀態MemoryStream,並依序還原狀態。 因此,將此數據流的狀態串行化為資料庫,並在稍後的時間點還原它可能有意義。 不過,透過遠端處理使用時,會代理此類型的物件。
如需擴充 MarshalByRefObject之類別串行化的詳細資訊,請參閱 RemotingSurrogateSelector。 如需實作 ISerializable的詳細資訊,請參閱 自定義串行化。
注意
此介面不適用於使用 System.Text.Json的 JSON 串行化。
給實施者的注意事項
實作這個介面,以允許對象參與自己的串行化和還原串行化。
方法
GetObjectData(SerializationInfo, StreamingContext) |
已淘汰.
將序列化目標物件所需的資料填入 SerializationInfo。 |