次の方法で共有


DesignerSerializationManager クラス

定義

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

セッションが破棄されるときに発生します。

明示的なインターフェイスの実装

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

シリアル化マネージャーにカスタムのシリアル化プロバイダーを追加します。

IDesignerSerializationManager.Context

このシリアル化セッションのコンテキスト スタックを取得します。

IDesignerSerializationManager.CreateInstance(Type, ICollection, String, Boolean)

CreateInstance(Type, ICollection, String, Boolean) メソッドを実装します。

IDesignerSerializationManager.GetInstance(String)

指定した名前の作成済みオブジェクトのインスタンスを取得します。

IDesignerSerializationManager.GetName(Object)

指定したオブジェクトの名前を取得します。

IDesignerSerializationManager.GetSerializer(Type, Type)

指定したオブジェクト型に対応する、要求された型のシリアライザーを取得します。

IDesignerSerializationManager.GetType(String)

指定した名前の型を取得します。

IDesignerSerializationManager.Properties

Properties プロパティを実装します。

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

以前に追加したシリアル化プロバイダーを削除します。

IDesignerSerializationManager.ReportError(Object)

シリアル化における回復可能なエラーの報告に使用します。

IDesignerSerializationManager.ResolveName

IDesignerSerializationManager.GetName(Object) が、指定した名前をシリアル化マネージャーの名前テーブルで見つけることができない場合に発生します。

IDesignerSerializationManager.SerializationComplete

シリアル化が完了したときに発生します。

IDesignerSerializationManager.SetName(Object, String)

指定したオブジェクトの名前を設定します。

IServiceProvider.GetService(Type)

このメンバーの説明については、GetService(Type) メソッドのトピックを参照してください。

適用対象

こちらもご覧ください