シリアル化 (Visual Basic)

シリアル化は、オブジェクトを格納するか、メモリ、データベース、またはファイルに転送するためにバイト ストリームに変換するプロセスです。 その主な目的は、必要なときに再作成できるように、オブジェクトの状態を保存しておくことです。 逆のプロセスは、逆シリアル化と呼ばれます。

シリアル化のしくみ

この図は、シリアル化の全体的なプロセスを示しています。

Serialization graphic

オブジェクトは、データだけでなく、バージョン、カルチャ、アセンブリ名などのオブジェクトの型に関する情報も伝達するストリームにシリアル化されます。 そのストリームから、オブジェクトをデータベース、ファイル、またはメモリに格納できます。

シリアル化の使用方法

開発者は、シリアル化を使用して、オブジェクトの状態を保存し、必要に応じて、オブジェクトのストレージとデータ交換を指定することで、オブジェクトを再作成することができます。 シリアル化を通じて、開発者は、Web サービスによるリモート アプリケーションへのオブジェクトの送信、ドメイン間のオブジェクトの受け渡し、XML 文字列としてのオブジェクトのファイアウォールの通過、アプリケーション間でのセキュリティまたはユーザー固有情報の維持などの操作を実行できます。

オブジェクトをシリアル化可能にする

オブジェクトをシリアル化するには、シリアル化するオブジェクト、シリアル化したオブジェクトを格納するストリーム、および Formatter が必要です。 System.Runtime.Serialization には、オブジェクトのシリアル化と逆シリアル化に必要なクラスが含まれます。

この型のインスタンスをシリアル化できることを示すには、SerializableAttribute 属性を適用します。 型に SerializationException 属性が適用されていない状態でシリアル化しようとすると、SerializableAttribute 例外がスローされます。

クラス内のフィールドをシリアル化しない場合は、NonSerializedAttribute 属性を適用します。 シリアル化できる型のフィールドに、特定の環境に固有のポインター、ハンドル、その他のデータ構造が含まれているときに、そのフィールドを別の環境で意味があるように再構成できない場合は、シリアル化不可にすることができます。

シリアル化されたクラスに、SerializableAttribute とマークされている他のクラスのオブジェクトへの参照が含まれている場合は、これらのオブジェクトもシリアル化されます。

バイナリ シリアル化と XML シリアル化

バイナリ シリアル化と XML シリアル化の両方を使用できます。 バイナリ シリアル化では、読み取り専用メンバーも含め、すべてのメンバーがシリアル化され、パフォーマンスが向上します。 XML シリアル化では、コードの読みやすさだけではなく、オブジェクトの共有と相互運用を行うための柔軟性が増加します。

バイナリ シリアル化

バイナリ シリアル化では、バイナリ エンコードを使用して、ストレージやソケット ベースのネットワーク ストリームなどのためのコンパクトなシリアル化を生成します。

XML シリアル化

XML シリアル化では、オブジェクトのパブリック フィールドやパブリック プロパティ、またはメソッドのパラメーターや戻り値を、特定の XML スキーマ定義言語 (XSD) ドキュメントに準拠する XML ストリームにシリアル化します。 XML シリアル化では、XML に変換されるパブリック プロパティとパブリック フィールドによって厳密に型指定されたクラスが生成されます。 System.Xml.Serialization には、XML のシリアル化と逆シリアル化に必要なクラスが含まれます。

属性をクラスおよびクラス メンバーに適用すると、XmlSerializer がそのクラスのインスタンスをシリアル化または逆シリアル化する方法を制御できます。

基本的なシリアル化とカスタムのシリアル化

シリアル化は、2 つの方法で実行できます (基本およびカスタム)。 基本的なシリアル化では、.NET Framework を使用して、オブジェクトが自動的にシリアル化されます。

基本的なシリアル化

基本的なシリアル化の唯一の要件は、オブジェクトに SerializableAttribute 属性が適用されていることです。 NonSerializedAttribute を使用して、特定のフィールドがシリアル化されないようにすることができます。

基本的なシリアル化を使用した場合、オブジェクトのバージョン管理で問題が発生することがあります。この場合は、カスタムのシリアル化を使用することをお勧めします。 基本的なシリアル化は、シリアル化を実行する最も簡単な方法ですが、プロセスを細かく制御することはできません。

カスタムのシリアル化

カスタムのシリアル化では、シリアル化するオブジェクトとシリアル化の方法を正確を指定できます。 クラスを SerializableAttribute でマークし、ISerializable インターフェイスを実装する必要があります。

カスタムの方法でオブジェクトを逆シリアル化する場合は、カスタム コンストラクターを使用する必要があります。

デザイナーのシリアル化

デザイナーのシリアル化はシリアル化の特殊な形式であり、通常は開発ツールに関連付けられているオブジェクトの永続性の種類を含みます。 デザイナーのシリアル化は、後でオブジェクト グラフを復元できるように、オブジェクト グラフをソース ファイルに変換するプロセスです。 ソース ファイルには、コードとマークアップを含めることができますが、SQL テーブル情報を含めることもできます。

関連トピックと例

チュートリアル: Visual Studio でのオブジェクトの永続化 (Visual Basic)
シリアル化によってインスタンス間でオブジェクトのデータを永続化して値を保存しておき、次にそのオブジェクトをインスタンス化するときにその値を取得する方法を示します。

方法: XML ファイルからオブジェクト データを読み込む (Visual Basic)
XmlSerializer クラスを使用して、XML ファイルに以前に書き込まれたオブジェクト データを読み込む方法を示します。

方法: XML ファイルにオブジェクト データを書き込む (Visual Basic)
XmlSerializer クラスを使用して、クラスから XML ファイルにオブジェクトを書き込む方法を示します。