シリアル化は、オブジェクトを格納したり、メモリ、データベース、またはファイルに送信したりするために、オブジェクトをバイト ストリームに変換するプロセスです。 その主な目的は、必要に応じて再作成できるようにオブジェクトの状態を保存することです。 逆プロセスは逆シリアル化と呼ばれます。
シリアル化のしくみ
この図は、シリアル化の全体的なプロセスを示しています。
オブジェクトはストリームにシリアル化され、データだけでなく、バージョン、カルチャ、アセンブリ名など、オブジェクトの型に関する情報が格納されます。 そのストリームから、データベース、ファイル、またはメモリに格納できます。
シリアル化の使用
シリアル化を使用すると、開発者はオブジェクトの状態を保存し、必要に応じて再作成し、オブジェクトのストレージとデータ交換を提供できます。 シリアル化を通じて、開発者は、Web サービスを使用してリモート アプリケーションにオブジェクトを送信する、あるドメインから別のドメインにオブジェクトを渡す、XML 文字列としてファイアウォールを介してオブジェクトを渡す、アプリケーション間でセキュリティまたはユーザー固有の情報を維持するなどのアクションを実行できます。
JSON シリアル化
System.Text.Json名前空間には、JavaScript Object Notation (JSON) のシリアル化と逆シリアル化のクラスが含まれています。 JSON は、Web 全体でデータを共有するために一般的に使用されるオープン標準です。
JSON シリアル化では、オブジェクトのパブリック プロパティを、 RFC 8259 JSON 仕様に準拠する文字列、バイト配列、またはストリームにシリアル化します。 クラスのインスタンス JsonSerializer シリアル化または逆シリアル化する方法を制御するには、次の 1 つ以上の方法を使用できます。
- JsonSerializerOptions オブジェクトを使用する
- System.Text.Json.Serialization名前空間の属性をクラスまたはプロパティに適用する
- コントラクトをカスタマイズする
- カスタム コンバーターを実装する
バイナリと XML のシリアル化
System.Runtime.Serialization名前空間には、バイナリおよび XML のシリアル化と逆シリアル化のクラスが含まれています。
バイナリ シリアル化では、読み取り専用のメンバーであっても、すべてのメンバーがシリアル化され、パフォーマンスが向上します。 XML シリアル化により、読みやすいコードが提供されるだけでなく、相互運用性のためにオブジェクト共有と使用の柔軟性が向上します。
Warnung
BinaryFormatter
によるバイナリ シリアル化は危険が伴う場合があります。 詳細については、「BinaryFormatter セキュリティ ガイド」および「BinaryFormatter 移行ガイド」を参照してください。
オブジェクトをシリアル化可能にする
バイナリシリアル化または XML シリアル化を使用してオブジェクトをシリアル化するには、シリアル化するオブジェクト、シリアル化されたオブジェクトを格納するストリーム、および Formatterが必要です。 System.Runtime.Serialization には、オブジェクトのシリアル化と逆シリアル化に必要なクラスが含まれています。
SerializableAttribute属性を型に適用して、この型のインスタンスをシリアル化できることを示します。 シリアル化を試みた場合、型にSerializationException属性がないとSerializableAttribute例外がスローされます。
クラス内のフィールドをシリアル化できない場合は、 NonSerializedAttribute 属性を適用します。 シリアル化可能な型のフィールドに、特定の環境に固有のポインター、ハンドル、またはその他のデータ構造が含まれており、そのフィールドを別の環境で意味のある形で再構成できない場合は、フィールドを非シリアル化可能にすることができます。
シリアル化されたクラスに、 SerializableAttributeマークされている他のクラスのオブジェクトへの参照が含まれている場合、それらのオブジェクトもシリアル化されます。
バイナリ シリアル化
バイナリ シリアル化では、バイナリ エンコードを使用して、ストレージやソケット ベースのネットワーク ストリームなどの用途に合わせてコンパクトなシリアル化を生成します。
XML シリアル化
XML シリアル化では、オブジェクトのパブリック フィールドとプロパティ、またはメソッドのパラメーターと戻り値を、特定の XML スキーマ定義言語 (XSD) ドキュメントに準拠する XML ストリームにシリアル化します。 XML シリアル化により、パブリック プロパティと XML に変換されるフィールドを持つ厳密に型指定されたクラスが生成されます。 System.Xml.Serialization には、XML のシリアル化と逆シリアル化に必要なクラスが含まれています。
XmlSerializerがクラスのインスタンスをシリアル化または逆シリアル化する方法を制御するために、クラスとクラス メンバーに属性を適用できます。
基本シリアル化とカスタム シリアル化
バイナリシリアル化と XML シリアル化は、基本とカスタムの 2 つの方法で実行できます。 基本的なシリアル化では、.NET を使用してオブジェクトを自動的にシリアル化します。
基本的なシリアル化の唯一の要件は、オブジェクトに SerializableAttribute 属性が適用されていることです。 NonSerializedAttributeを使用して、特定のフィールドがシリアル化されないようにすることができます。
基本的なシリアル化を使用すると、オブジェクトのバージョン管理によって問題が発生する可能性があります。その場合は、カスタム シリアル化が推奨される場合があります。 基本的なシリアル化はシリアル化を実行する最も簡単な方法ですが、プロセスをあまり制御できません。
カスタム シリアル化では、シリアル化するオブジェクトとその実行方法を正確に指定できます。 クラスは SerializableAttribute マークされ、 ISerializable インターフェイスを実装する必要があります。 オブジェクトをカスタムの方法で逆シリアル化する場合は、カスタム コンストラクターを使用する必要があります。
デザイナー シリアル化
デザイナーのシリアル化は、通常、開発ツールに関連付けられているオブジェクト永続化の種類を含む特殊な形式のシリアル化です。 デザイナーのシリアル化は、オブジェクト グラフを後でオブジェクト グラフの回復に使用できるソース ファイルに変換するプロセスです。 ソース ファイルには、コード、マークアップ、または SQL テーブル情報を含めることができます。
関連資料
方法: XML ファイルからオブジェクト データを読み取る (Visual Basic)
XmlSerializer クラスを使用して XML ファイルに以前に書き込まれたオブジェクト データを読み取る方法を示します。
方法: オブジェクト データを XML ファイルに書き込む (Visual Basic)
XmlSerializer クラスを使用して、クラスから XML ファイルにオブジェクトを書き込む方法を示します。
.NET