次の方法で共有


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 オブジェクトを表すために必要なすべてのデータを設定します。 は Formatter 、グラフ内の オブジェクトの型を持つ を作成 SerializationInfo します。 プロキシを自分で送信する必要があるオブジェクトは、 および AssemblyName メソッドSerializationInfoFullTypeName使用して、送信される情報を変更できます。

クラス継承の場合は、 を実装 ISerializableする基底クラスから派生したクラスをシリアル化できます。 この場合、派生クラスは の実装内で の基底クラスの GetObjectData 実装 GetObjectDataを呼び出す必要があります。 それ以外の場合、基底クラスのデータはシリアル化されません。

インターフェイスは ISerializable 、シグネチャ constructor (SerializationInfo information, StreamingContext context)を持つコンストラクターを意味します。 逆シリアル化時に、現在のコンストラクターは、 内 SerializationInfo のデータがフォーマッタによって逆シリアル化された後にのみ呼び出されます。 一般に、 クラスが でないsealed場合、このコンストラクターは であるprotected必要があります。

オブジェクトが逆シリアル化される順序は保証されません。 たとえば、1 つの型が、まだ逆シリアル化されていない型を参照している場合、例外が発生します。 このような依存関係を持つ型を作成する場合は、 インターフェイスと メソッドを実装することで問題をIDeserializationCallbackOnDeserialization回避できます。

シリアル化アーキテクチャは、 を拡張する型と同じように拡張 MarshalByRefObject されるオブジェクト型を Object処理します。 これらの型は、 で SerializableAttribute マークし、インターフェイスを他の ISerializable オブジェクト型として実装できます。 オブジェクトの状態がキャプチャされ、ストリームに保持されます。

これらの型が を介して System.Runtime.Remoting使用されている場合、リモート処理インフラストラクチャは、一般的なシリアル化を優先し、代わりに プロキシを にシリアル化するサロゲートを MarshalByRefObject提供します。 サロゲートは、特定の型のオブジェクトをシリアル化および逆シリアル化する方法を認識するヘルパーです。 プロキシは、ほとんどの場合、ユーザーには見えませんが、 型 ObjRefになります。

一般的な設計パターンとして、クラスがシリアル化可能な属性でマークされ、 を拡張 MarshalByRefObjectすることは通常と異なっています。 開発者は、これら 2 つの特性を組み合わせるときに可能なシリアル化とリモート処理のシナリオについて慎重に検討する必要があります。 これが適用可能な例の 1 つは、 MemoryStreamです。 () のMemoryStream基底クラスは からMarshalByRefObject拡張されていますが、 のMemoryStream状態をキャプチャし、それを思い出して復元Streamできます。 そのため、このストリームの状態をデータベースにシリアル化し、後で復元することが意味を持つ場合があります。 ただし、リモート処理で使用すると、この型のオブジェクトがプロキシされます。

を拡張 MarshalByRefObjectするクラスのシリアル化の詳細については、「」を参照してください RemotingSurrogateSelector。 の実装 ISerializableの詳細については、「 カスタム シリアル化」を参照してください。

注意

このインターフェイスは、 を使用 System.Text.Jsonした JSON シリアル化には適用されません。

注意 (実装者)

オブジェクトが独自のシリアル化と逆シリアル化に参加できるようにするには、このインターフェイスを実装します。

メソッド

GetObjectData(SerializationInfo, StreamingContext)
古い.

SerializationInfo に、オブジェクトをシリアル化するために必要なデータを設定します。

適用対象

こちらもご覧ください