DesignerSerializationManager クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
IDesignerSerializationManager インターフェイスの実装を提供します。
public ref class DesignerSerializationManager : IServiceProvider, System::ComponentModel::Design::Serialization::IDesignerSerializationManager
public class DesignerSerializationManager : IServiceProvider, System.ComponentModel.Design.Serialization.IDesignerSerializationManager
type DesignerSerializationManager = class
interface IDesignerSerializationManager
interface IServiceProvider
Public Class DesignerSerializationManager
Implements IDesignerSerializationManager, IServiceProvider
- 継承
-
DesignerSerializationManager
- 実装
注釈
インターフェイスは IDesignerSerializationManager 、シリアル化を制御するオブジェクトへの形式に依存しないインターフェイスとして設計されています。 基本的には、逆シリアル化を実際に実行するシリアライザーにコンテキストとサービスを提供します。 IDesignerSerializationManager は、オブジェクトを追跡することで逆シリアル化プロセスを支援します。 これはインターフェイスの IDesignerHost 手法に似ています。デザイナーは実際にはユーザー インターフェイス (UI) を提供し、 IDesignerHost さまざまなデザイナーが共同作業できるようにする接着剤を提供します。
DesignerSerializationManager クラスは、IDesignerSerializationManager を実装しています。 これは、 のような実行時シリアライザーに似た一般的な形式の逆シリアル化を BinaryFormatter提供するように設計されています。
クラスは DesignerSerializationManager 、次の 3 つの目標を達成します。
これは、さまざまな形式を逆シリアル化するために使用できる単純なターンキー オブジェクトです。
これはジェネリックであり、特定の形式には関連付けされません。 これは、CodeDOM の逆シリアル化とマークアップの逆シリアル化にも同様に使用できます。
これは拡張可能であり、コピー/貼り付けと元に戻す/やり直しのシナリオで使用されるさまざまなシリアル化方法をサポートしています。
デザイン時のシリアル化には、ランタイム オブジェクトのシリアル化とは次の違いがあります。
一般に、シリアル化を実行するオブジェクトはランタイム オブジェクトとは別であるため、デザイン時ロジックをコンポーネントから削除できます。
シリアル化スキームでは、オブジェクトが完全に初期化され、逆シリアル化中にプロパティとメソッドの呼び出しによって変更されることを前提としています。
オブジェクトに設定されていない値を持つオブジェクトのプロパティ (プロパティには既定値が含まれます) はシリアル化されません。 逆に、逆シリアル化ストリームには穴がある場合があります。
オブジェクトの完全なシリアル化ではなく、シリアル化ストリーム内のコンテンツの品質に重点が置かれます。 つまり、オブジェクトをシリアル化する方法が定義されていない場合は、例外をスローするのではなく、そのオブジェクトがスキップされる可能性があります。 シリアル化エンジンは、ここでヒューリスティックを提供して、無視できるエラーと回復不能なエラーを決定する場合があります。
シリアル化ストリームには、逆シリアル化に必要なデータよりも多くのデータが含まれる場合があります。 たとえば、ソース コードのシリアル化には、オブジェクト グラフの逆シリアル化に必要なコードとユーザー コードが混在しています。 このユーザー コードは、逆シリアル化では無視し、シリアル化時に保持する必要があります。
これらの違いにより、デザイン時のシリアル化には異なるシリアル化モデルが適用されます。 このモデルでは、シリアル化するデータ型ごとに個別のシリアライザー オブジェクトを使用します。 各シリアライザーは、問題全体への小さな貢献を提供します。 これらのシリアライザーはすべて、共通のシリアル化マネージャーを通じて調整されます。 シリアル化マネージャーは、これらの異なるシリアライザー間の状態を維持する役割を担います。 例として、次のクラスを考えてみましょう。
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; }
}
}
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
このクラスのインスタンスは、3 つの異なるシリアライザーを利用します。1 つは 、 SampleObject
は文字列用、もう 1 つは整数用です。 のシリアライザー SampleObject
は、シリアル化グラフのルートであるため SampleObject
、ルート シリアライザーと呼ばれます。 より複雑なオブジェクト グラフも作成できます。 たとえば、次のようにが変更された場合 SampleObject
に何が起こるかを考えてみましょう。
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; }
}
}
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
これにより、 SampleObject
それ自体の別のインスタンスである子を持つことができます。 次のコードは、オブジェクト グラフに入力します。
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;
}
}
}
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
root
がシリアル化されると、4 つのシリアライザーが使用されます。1 つのルート シリアライザー、1 つのシリアライザー (子SampleObject
用)、1 つのシリアライザー (int
)、および に 1 つのシリアライザーがありますstring
。 シリアライザーは型に基づいてキャッシュされるため、 のインスタンス SampleObject
ごとにシリアライザーを作成する必要はありません。
クラスは DesignerSerializationManager 、シリアル化セッションの概念に基づいています。 セッションは、さまざまなシリアライザーからアクセスできる状態を保持します。 セッションが破棄されると、この状態は破棄されます。 これにより、シリアライザーが大きくステートレスであり、破損しているシリアライザーをクリーンするのに役立ちます。 次の表では、セッション間での状態の管理方法について説明します。
グローバル状態
この状態はシリアル化マネージャー オブジェクトによって所有されますが、現在のシリアル化セッションとは無関係です。
オブジェクト | 使用法 |
---|---|
シリアル化プロバイダー | オブジェクトは、それ自体をカスタム シリアル化プロバイダーとして追加できます。 これらのプロバイダーはシリアライザーを見つけるために使用されるため、シリアル化セッションより長く使用されます。 |
Session-Owned 状態
この状態はセッションによって所有され、セッションが破棄されると破棄されます。 そのため、この状態を操作するプロパティまたはメソッドにアクセスすると、シリアル化マネージャーがアクティブなセッションにない場合は例外がスローされます。
オブジェクト | 使用法 |
---|---|
ResolveName イベント | イベントは ResolveName 、名前の解決を追加するためにシリアライザーによってアタッチされます。 セッションが終了すると、すべてのハンドラーがこのイベントからデタッチされます。 |
SerializationComplete イベント | イベントは SerializationComplete 、セッションが破棄される直前に発生します。 その後、すべてのハンドラーがこのイベントからデタッチされます。 |
名前テーブル | シリアル化マネージャーは、オブジェクトとその名前の間でマップされるテーブルを保持します。 シリアライザーでは、識別を容易にするためのオブジェクト名を指定できます。 この名前テーブルは、セッションが終了するとクリアされます。 |
シリアライザー キャッシュ | シリアル化マネージャーは、提供を求められたシリアライザーのキャッシュを保持します。 このキャッシュは、セッションが終了するとクリアされます。 パブリック GetSerializer メソッドはいつでも安全に呼び出すことができますが、その値はセッション内から呼び出された場合にのみキャッシュされます。 |
コンテキスト スタック | シリアル化マネージャーは、コンテキスト スタックと呼ばれるオブジェクトを保持します。このオブジェクトには、 プロパティを Context 使用してアクセスできます。 シリアライザーは、このスタックを使用して、他のシリアライザーで使用できる追加情報を格納できます。 たとえば、プロパティ値をシリアル化しているシリアライザーは、シリアル化する値を要求する前に、シリアル化スタックでプロパティ名をプッシュできます。 このスタックは、セッションが終了するとクリアされます。 |
エラー一覧 | シリアル化マネージャーは、シリアル化中に発生したエラーの一覧を保持します。 このリストは、 プロパティを Errors 介してアクセスされ、セッションが終了するとクリアされます。 セッション間で プロパティに Errors アクセスすると、例外が発生します。 |
コンストラクター
DesignerSerializationManager() |
DesignerSerializationManager クラスの新しいインスタンスを初期化します。 |
DesignerSerializationManager(IServiceProvider) |
指定したサービス プロバイダーで DesignerSerializationManager クラスの新しいインスタンスを初期化します。 |
プロパティ
Container |
このシリアル化マネージャーのコンテナーを取得または設定します。 |
Errors |
シリアル化または逆シリアル化の実行時に発生したエラーのリストを取得します。 |
PreserveNames |
CreateInstance(Type, ICollection, String, Boolean) メソッドが、コンテナーに指定した名前が存在することをチェックする必要があるかどうかを示す値を取得または設定します。 |
PropertyProvider |
シリアル化マネージャーの Properties プロパティにプロパティを提供する際に使用する必要のあるオブジェクトを取得します。 |
RecycleInstances |
CreateInstance(Type, ICollection, String, Boolean) が型の新しいインスタンスを常に作成するかどうかを示す値が取得または設定されます。 |
ValidateRecycledTypes |
CreateInstance(Type, ICollection, String, Boolean) メソッドによって、一致する名前が同じ型を参照していることが検査されるかどうかを示す値が取得または設定されます。 |
メソッド
CreateInstance(Type, ICollection, String, Boolean) |
型のインスタンスを作成します。 |
CreateSession() |
新しいシリアル化セッションを作成します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetRuntimeType(String) |
指定された型名に対応する型を取得します。 |
GetSerializer(Type, Type) |
指定したオブジェクト型のシリアライザーを取得します。 |
GetService(Type) |
要求したサービスを取得します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
GetType(String) |
要求された型を取得します。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
OnResolveName(ResolveNameEventArgs) |
ResolveName イベントを発生させます。 |
OnSessionCreated(EventArgs) |
SessionCreated イベントを発生させます。 |
OnSessionDisposed(EventArgs) |
SessionDisposed イベントを発生させます。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
イベント
SessionCreated |
セッションが作成されるときに発生します。 |
SessionDisposed |
セッションが破棄されるときに発生します。 |
明示的なインターフェイスの実装
適用対象
こちらもご覧ください
.NET