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にオブジェクトを表すために必要なすべてのデータを設定します。 Formatterは、グラフ内のオブジェクトの種類を持つSerializationInfoを作成します。 プロキシを自身で送信する必要があるオブジェクトは、SerializationInfoのFullTypeNameメソッドとAssemblyNameメソッドを使用して、送信される情報を変更できます。
クラス継承の場合、 ISerializableを実装する基底クラスから派生するクラスをシリアル化できます。 この場合、派生クラスは、GetObjectDataの実装内でGetObjectDataの基底クラスの実装を呼び出す必要があります。 それ以外の場合、基底クラスのデータはシリアル化されません。
ISerializable インターフェイスは、シグネチャconstructor (SerializationInfo information, StreamingContext context)を持つコンストラクターを意味します。 逆シリアル化時に、現在のコンストラクターは、 SerializationInfo 内のデータがフォーマッタによって逆シリアル化された後にのみ呼び出されます。 一般に、クラスがsealedされていない場合は、このコンストラクターをprotectedする必要があります。
オブジェクトが逆シリアル化される順序は保証できません。 たとえば、1 つの型がまだ逆シリアル化されていない型を参照している場合、例外が発生します。 このような依存関係を持つ型を作成する場合は、 IDeserializationCallback インターフェイスと OnDeserialization メソッドを実装することで、問題を回避できます。
シリアル化アーキテクチャは、Objectを拡張する型と同じMarshalByRefObject拡張するオブジェクト型を処理します。 これらの型は、 SerializableAttribute でマークし、他のオブジェクト型として ISerializable インターフェイスを実装できます。 オブジェクトの状態がキャプチャされ、ストリームに保持されます。
これらの型が System.Runtime.Remotingを介して使用されている場合、リモート処理インフラストラクチャは、一般的なシリアル化を優先し、代わりにプロキシを MarshalByRefObjectにシリアル化するサロゲートを提供します。 サロゲートは、特定の型のオブジェクトをシリアル化および逆シリアル化する方法を認識するヘルパーです。 ほとんどの場合、プロキシはユーザーには見えませんが、 ObjRef型になります。
一般的な設計パターンとして、クラスがシリアル化可能な属性でマークされ、 MarshalByRefObject拡張されるのは普通ではありません。 開発者は、これら 2 つの特性を組み合わせるときに可能なシリアル化とリモート処理のシナリオについて慎重に検討する必要があります。 これが適用される可能性がある 1 つの例は、 MemoryStreamです。 MemoryStream (Stream) の基底クラスはMarshalByRefObjectから拡張されますが、MemoryStreamの状態をキャプチャして、その状態を復元できます。 そのため、このストリームの状態をデータベースにシリアル化し、後で復元することが意味を持つ場合があります。 ただし、リモート処理で使用すると、この型のオブジェクトがプロキシされます。
MarshalByRefObjectを拡張するクラスのシリアル化の詳細については、RemotingSurrogateSelectorを参照してください。 ISerializableの実装の詳細については、「カスタム シリアル化」を参照してください。
Note
このインターフェイスは、 System.Text.Jsonを使用した JSON シリアル化には適用されません。
注意 (実装者)
このインターフェイスを実装して、オブジェクトが独自のシリアル化と逆シリアル化に参加できるようにします。
メソッド
| 名前 | 説明 |
|---|---|
| GetObjectData(SerializationInfo, StreamingContext) |
ターゲット オブジェクトをシリアル化するために必要なデータを SerializationInfo に設定します。 |