DesignerSerializationManager イベント
DesignerSerializationManager クラス
アセンブリ: System.Design (system.design.dll 内)

Public Class DesignerSerializationManager Implements IDesignerSerializationManager, IServiceProvider

IDesignerSerializationManager インターフェイスは、シリアル化を制御するオブジェクトに対する、形式に依存しないインターフェイスとしてデザインされています。このインターフェイスは、基本的に、実際は逆シリアル化を実行するシリアライザにコンテキストとサービスを提供します。IDesignerSerializationManager は、オブジェクトの追跡を続けることによって逆シリアル化プロセスを支援します。これは、IDesignerHost インターフェイスに対する手法においても同様です。デザイナは、実際にはユーザー インターフェイス (UI: User Interface) を提供し、IDesignerHost は、さまざまなデザイナを結びつけて連動できるようにします。
DesignerSerializationManager クラスは、IDesignerSerializationManager を実装しています。このクラスは、BinaryFormatter のような実行時シリアライザと同様の、逆シリアル化の汎用的な形式を提供するようにデザインされています。
DesignerSerializationManager クラスでは、次の 3 つの目標を実現しています。
-
汎用的であり、特定の形式に依存しません。CodeDOM 逆シリアル化、およびマークアップの逆シリアル化の場合と同様に使用できます。
-
拡張性があり、コピー/貼り付けや元に戻す/やり直しの各シナリオで使用する、さまざまなシリアル化メソッドをサポートしています。
デザイン時のシリアル化は、実行時のオブジェクトのシリアル化と次の点で異なります。
-
シリアル化を実行するオブジェクトは、通常、実行時のオブジェクトから分離しているため、デザイン時のロジックをコンポーネントから削除できます。
-
シリアル化方式は、オブジェクトが作成されて完全に初期化され、逆シリアル化の実行時にプロパティやメソッドの呼び出しによって変更されることを前提としています。
-
オブジェクト上で一度も設定されていない値を持つオブジェクト (プロパティに既定値が格納されたオブジェクト) のプロパティはシリアル化されません。逆に言えば、逆シリアル化ストリームには穴がある場合があります。
-
オブジェクトの完全なシリアル化ではなく、シリアル化ストリームの内容の質に重点が置かれます。これは、オブジェクトをシリアル化する方法が定義されていない場合、そのオブジェクトは例外をスローするのではなく、スキップされる可能性があることを意味します。シリアル化エンジンは、どのエラーを無視できるか、また、回復不可能なエラーはどれかを判断するためのヒューリスティックを提供できます。
-
シリアル化ストリームには、逆シリアル化に必要なデータよりも多くのデータが含まれる場合があります。たとえば、ソース コードのシリアル化には、オブジェクト グラフの逆シリアル化に必要なコードと混合されたユーザー コードが含まれます。このユーザー コードは、逆シリアル化では無視され、シリアル化では保持される必要があります。
これらの相違点から、デザイン時のシリアル化には、別のシリアル化モデルが適用されます。このモデルでは、シリアル化の対象となるデータ型ごとに個別のシリアライザ オブジェクトを利用します。各シリアライザは、問題全体に対してはわずかずつ有効です。これらのシリアライザは、すべて共通のシリアル化マネージャを通じて調整されます。シリアル化マネージャは、これら異なるシリアライザ間で状態を維持する必要があります。一例として、次のクラスを考えてみます。
Public Class SampleObject Private stringValue As String = Nothing Private intValue As Integer = Integer.MinValue Public Property StringProperty() As String Get Return Me.stringValue End Get Set Me.stringValue = value End Set End Property Public Property IntProperty() As Integer Get Return Me.intValue End Get Set Me.intValue = value End Set End Property End Class
public class SampleObject { private string stringValue = null; private int intValue = int.MinValue; public string StringProperty { get { return this.stringValue; } set { this.stringValue = value; } } public int IntProperty { get { return this.intValue; } set{ this.intValue = value; } } }
このクラスのインスタンスは、SampleObject 用、文字列用、整数用の 3 種類のシリアライザを利用します。SampleObject はシリアル化グラフのルートであるため、SampleObject のシリアライザは、ルート シリアライザと呼ばれます。さらに複雑なオブジェクト グラフも作成できます。たとえば、SampleObject が次のように変更された場合に、何が起こるかを考えてみます。
Public Class SampleObject Private stringValue As String = Nothing Private intValue As Integer = Integer.MinValue Private childValue As SampleObject = Nothing Public Property StringProperty() As String Get Return Me.stringValue End Get Set Me.stringValue = value End Set End Property Public Property IntProperty() As Integer Get Return Me.intValue End Get Set Me.intValue = value End Set End Property Public Property Child() As SampleObject Get Return Me.childValue End Get Set Me.childValue = value End Set End Property End Class
public class SampleObject { private string stringValue = null; private int intValue = int.MinValue; private SampleObject childValue = null; public string StringProperty { get { return this.stringValue; } set { this.stringValue = value; } } public int IntProperty { get { return this.intValue; } set { this.intValue = value; } } public SampleObject Child { get { return this.childValue; } set { this.childValue = value; } } }
これにより、SampleObject はそれ自体の別のインスタンスである子を持つことができます。オブジェクト グラフに次のコードを記述します。
Class Program Public Overloads Shared Sub Main() Main(System.Environment.GetCommandLineArgs()) End Sub Overloads Shared Sub Main(args() As String) Dim root As New SampleObject() Dim currentObject As SampleObject = root Dim i As Integer For i = 0 To 9 Dim o As New SampleObject() currentObject.Child = o currentObject = o Next i End Sub End Class
class Program { static void Main(string[] args) { SampleObject root = new SampleObject(); SampleObject currentObject = root; for (int i = 0; i < 10; i++) { SampleObject o = new SampleObject(); currentObject.Child = o; currentObject = o; } } }
root をシリアル化するときには、ルート シリアライザと、子 SampleObject 用、int 用、string 用の各シリアライザの 4 つのシリアライザが使用されます。シリアライザは型に基づいてキャッシュされるため、SampleObject の各インスタンス用にシリアライザを作成する必要はありません。
DesignerSerializationManager クラスは、シリアル化セッションの概念に基づいています。セッションでは、さまざまなシリアライザがアクセスできる状態を維持します。セッションが破棄されると、この状態も破棄されます。これにより、シリアライザをほとんどの場合状態のないままにしておけます。また、破損した状態にあるシリアライザの削除にも役立ちます。セッション内およびセッション間で、状態がどのように管理されるかを次の表に示します。
グローバル状態セッション保有の状態
この状態はセッションが保有し、セッションが破棄されるとこの状態も破棄されます。したがって、シリアル化マネージャにアクティブなセッションがない場合、この状態を操作するプロパティまたはメソッドにアクセスすると、例外がスローされます。
ResolveName イベント | ResolveName イベントは、名前の解決を提供するためにシリアライザによって接続されます。セッションが終了すると、すべてのハンドラはこのイベントから接続解除されます。 |
SerializationComplete イベント | SerializationComplete イベントは、セッションが破棄される直前に発生します。この後、すべてのハンドラがこのイベントから接続解除されます。 |
名前テーブル | シリアル化マネージャは、オブジェクトとその名前を対応付けるテーブルを保持しています。シリアライザは、識別を容易にするために、オブジェクトに名前を付けることができます。セッションが終了すると、この名前テーブルは消去されます。 |
シリアライザのキャッシュ | シリアル化マネージャは、提供を要求されているシリアライザのキャッシュを保持しています。セッションが終了すると、このキャッシュは消去されます。パブリック メソッド GetSerializer は、いつでも安全に呼び出すことができますが、その値がキャッシュされるのは、セッション内から呼び出した場合だけです。 |
シリアル化マネージャは、コンテキスト スタックと呼ばれるオブジェクトを保持しています。このオブジェクトには、Context プロパティを使用してアクセスできます。シリアライザはこのスタックを使用して、他のシリアライザで使用できる追加情報を格納します。たとえば、プロパティ値をシリアル化するシリアライザは、シリアル化する値を要求する前に、シリアル化スタックでプロパティ名をプッシュできます。セッションが終了すると、このスタックは消去されます。 | |
シリアル化マネージャは、シリアル化の実行時に発生したエラーのリストを保持しています。このリストには、Errors プロパティからアクセスします。セッションが終了すると、エラー リストは消去されます。各セッションの合間に Errors プロパティにアクセスすると、例外が発生します。 |

System.ComponentModel.Design.Serialization.DesignerSerializationManager


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DesignerSerializationManager コンストラクタ ()
アセンブリ: System.Design (system.design.dll 内)




Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DesignerSerializationManager コンストラクタ (IServiceProvider)
アセンブリ: System.Design (system.design.dll 内)

- provider
IServiceProvider。


シリアライザが、シリアル化マネージャが応じられないサービスを要求した場合、既定の実装は provider パラメータにその要求を転送します。
このコンストラクタは、PreserveNames プロパティと ValidateRecycledTypes プロパティに true を設定します。


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DesignerSerializationManager コンストラクタ

名前 | 説明 |
---|---|
DesignerSerializationManager () | DesignerSerializationManager クラスの新しいインスタンスを初期化します。 |
DesignerSerializationManager (IServiceProvider) | 指定したサービス プロバイダで DesignerSerializationManager クラスの新しいインスタンスを初期化します。 |

DesignerSerializationManager プロパティ

名前 | 説明 | |
---|---|---|
![]() | Container | このシリアル化マネージャのコンテナを取得または設定します。 |
![]() | Errors | シリアル化または逆シリアル化の実行時に発生したエラーのリストを取得します。 |
![]() | PreserveNames | CreateInstance メソッドが、コンテナに指定した名前が存在することをチェックする必要があるかどうかを示す値を取得または設定します。 |
![]() | PropertyProvider | シリアル化マネージャの Properties プロパティにプロパティを提供する際に使用する必要のあるオブジェクトを取得します。 |
![]() | RecycleInstances | CreateInstance が型の新しいインスタンスを常に作成するかどうかを示すフラグを取得または設定します。 |
![]() | ValidateRecycledTypes | CreateInstance メソッドが、一致する名前が同じ型を参照していることを検査するかどうかを示すフラグを取得または設定します。 |

名前 | 説明 | |
---|---|---|
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.Context | このシリアル化セッションのコンテキスト スタックを取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.Properties | Properties プロパティを実装します。 |

DesignerSerializationManager メソッド

名前 | 説明 | |
---|---|---|
![]() | CreateSession | 新しいシリアル化セッションを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetSerializer | 指定したオブジェクト型のシリアライザを取得します。 |
![]() | GetType | オーバーロードされます。 要求された型を取得します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | CreateInstance | 型のインスタンスを作成します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | GetService | 要求したサービスを取得します。 |
![]() | GetType | オーバーロードされます。 要求された型を取得します。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
![]() | OnResolveName | ResolveName イベントを発生させます。 |
![]() | OnSessionCreated | SessionCreated イベントを発生させます。 |
![]() | OnSessionDisposed | SessionDisposed イベントを発生させます。 |

名前 | 説明 | |
---|---|---|
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.AddSerializationProvider | シリアル化マネージャにカスタムのシリアル化プロバイダを追加します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance | CreateInstance メソッドを実装します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetInstance | 指定した名前の作成済みオブジェクトのインスタンスを取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetName | 指定したオブジェクトの名前を取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetSerializer | 指定したオブジェクト型に対応する、要求された型のシリアライザを取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetType | 指定した名前の型を取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.RemoveSerializationProvider | 以前に追加したシリアル化プロバイダを削除します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.ReportError | シリアル化における回復可能なエラーの報告に使用します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.SetName | 指定したオブジェクトの名前を設定します。 |
![]() | System.IServiceProvider.GetService | このメンバの説明については、GetService メソッドに関するトピックを参照してください。 |

DesignerSerializationManager メンバ
IDesignerSerializationManager インターフェイスの実装を提供します。
DesignerSerializationManager データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | Container | このシリアル化マネージャのコンテナを取得または設定します。 |
![]() | Errors | シリアル化または逆シリアル化の実行時に発生したエラーのリストを取得します。 |
![]() | PreserveNames | CreateInstance メソッドが、コンテナに指定した名前が存在することをチェックする必要があるかどうかを示す値を取得または設定します。 |
![]() | PropertyProvider | シリアル化マネージャの Properties プロパティにプロパティを提供する際に使用する必要のあるオブジェクトを取得します。 |
![]() | RecycleInstances | CreateInstance が型の新しいインスタンスを常に作成するかどうかを示すフラグを取得または設定します。 |
![]() | ValidateRecycledTypes | CreateInstance メソッドが、一致する名前が同じ型を参照していることを検査するかどうかを示すフラグを取得または設定します。 |

名前 | 説明 | |
---|---|---|
![]() | CreateSession | 新しいシリアル化セッションを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetSerializer | 指定したオブジェクト型のシリアライザを取得します。 |
![]() | GetType | オーバーロードされます。 要求された型を取得します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | CreateInstance | 型のインスタンスを作成します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | GetService | 要求したサービスを取得します。 |
![]() | GetType | オーバーロードされます。 要求された型を取得します。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
![]() | OnResolveName | ResolveName イベントを発生させます。 |
![]() | OnSessionCreated | SessionCreated イベントを発生させます。 |
![]() | OnSessionDisposed | SessionDisposed イベントを発生させます。 |


名前 | 説明 | |
---|---|---|
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.AddSerializationProvider | シリアル化マネージャにカスタムのシリアル化プロバイダを追加します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance | CreateInstance メソッドを実装します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetInstance | 指定した名前の作成済みオブジェクトのインスタンスを取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetName | 指定したオブジェクトの名前を取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetSerializer | 指定したオブジェクト型に対応する、要求された型のシリアライザを取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetType | 指定した名前の型を取得します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.RemoveSerializationProvider | 以前に追加したシリアル化プロバイダを削除します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.ReportError | シリアル化における回復可能なエラーの報告に使用します。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.SetName | 指定したオブジェクトの名前を設定します。 |
![]() | System.IServiceProvider.GetService | このメンバの説明については、GetService メソッドに関するトピックを参照してください。 |
![]() | System.ComponentModel.Design.Serialization.IDesignerSerializationManager.SerializationComplete |

- DesignerSerializationManagerのページへのリンク