다음을 통해 공유


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 serialization을 제어하는 개체에 대한 형식 독립적 인터페이스로 설계되었습니다. 기본적으로 역직렬화를 수행하는 직렬 변환기에 컨텍스트 및 서비스를 제공합니다. IDesignerSerializationManager 는 개체를 추적하여 역직렬화 프로세스를 지원합니다. 이는 인터페이스와 비슷한 기술 IDesignerHost 입니다. 디자이너는 실제로 UI(사용자 인터페이스) IDesignerHost 를 제공하고 다른 디자이너가 함께 작업할 수 있도록 하는 접착제를 제공합니다.

DesignerSerializationManager 클래스는 IDesignerSerializationManager을 구현합니다. 와 같은 BinaryFormatter런타임 직렬 변환기와 유사한 일반 형태의 역직렬화를 제공하도록 설계되었습니다.

클래스는 DesignerSerializationManager 다음 세 가지 목표를 달성합니다.

  • 다양한 형식을 역직렬화하는 데 사용할 수 있는 간단한 턴키 개체입니다.

  • 제네릭이며 특정 형식에 연결되지 않습니다. 태그 역직렬화뿐만 아니라 CodeDOM 역직렬화에도 동일하게 사용할 수 있습니다.

  • 확장 가능하며 복사/붙여넣기 및 실행 취소/다시 실행 시나리오에 사용되는 다양한 serialization 메서드를 지원합니다.

디자인 타임 serialization에는 런타임 개체 serialization과 다음과 같은 차이점이 있습니다.

  • serialization을 수행하는 개체는 일반적으로 런타임 개체와 분리되므로 디자인 타임 논리를 구성 요소에서 제거할 수 있습니다.

  • serialization 스키마는 개체가 완전히 초기화된 다음 역직렬화하는 동안 속성 및 메서드 호출을 통해 수정될 것이라고 가정합니다.

  • 개체에 설정되지 않은 값이 있는 개체의 속성(속성에 기본값 포함)은 serialize되지 않습니다. 반대로 역직렬화 스트림에는 구멍이 있을 수 있습니다.

  • 개체의 전체 직렬화가 아닌 serialization 스트림 내의 콘텐츠 품질에 중점을 둡 수 있습니다. 즉, 개체를 serialize하는 정의된 방법이 없으면 예외를 throw하는 대신 해당 개체를 건너뛸 수 있습니다. serialization 엔진은 여기에서 추론을 제공하여 무시할 수 있는 오류와 복구할 수 없는 오류를 결정할 수 있습니다.

  • serialization 스트림에는 역직렬화에 필요한 것보다 더 많은 데이터가 있을 수 있습니다. 예를 들어 소스 코드 serialization에는 개체 그래프를 역직렬화하는 데 필요한 코드와 사용자 코드가 혼합되어 있습니다. 이 사용자 코드는 역직렬화에서 무시되고 serialization에서 유지되어야 합니다.

이러한 차이로 인해 디자인 타임 serialization에 다른 serialization 모델이 적용됩니다. 이 모델은 serialize되는 각 데이터 형식에 대해 별도의 serializer 개체를 활용합니다. 각 직렬 변환기는 문제에 전체적으로 작은 기여를 제공합니다. 이러한 직렬 변환기는 모두 공통 serialization 관리자를 통해 조정됩니다. serialization 관리자는 이러한 서로 다른 직렬 변환기 간의 상태를 유지 관리합니다. 예를 들어 다음 클래스를 고려합니다.

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

이 클래스의 instance 세 가지 직렬 변환기를 사용합니다. 하나는 SampleObject, 하나는 문자열용, 다른 하나는 정수용입니다. 는 serialization 그래프의 루트이기 때문에 SampleObject 에 대한 SampleObject serializer를 루트 직렬 변환기라고 합니다. 더 복잡한 개체 그래프도 만들 수 있습니다. 예를 들어 다음과 같이 변경된 경우 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

이렇게 하면 자체의 또 다른 instance 자식이 있을 수 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개의 직렬 변환기가 사용됩니다. 즉, 루트 serializer 1개, 자식 SampleObject직렬 변환기 1개, 의 직렬 변환기 int1개, 에 대한 string직렬 변환기 1개가 사용됩니다. 직렬 변환기는 형식에 따라 캐시되므로 의 각 instance SampleObject대한 직렬 변환기를 만들 필요가 없습니다.

클래스는 DesignerSerializationManager serialization 세션의 개념을 기반으로 합니다. 세션은 다양한 직렬 변환기에서 액세스할 수 있는 상태를 유지 관리합니다. 세션이 삭제되면 이 상태가 제거됩니다. 이렇게 하면 직렬 변환기가 주로 상태 비저장 상태로 유지되고 손상된 직렬 변환기를 클린 수 있습니다. 다음 표에서는 세션 간에 상태를 관리하는 방법을 설명합니다.

전역 상태

이 상태는 serialization 관리자 개체가 소유하지만 현재 serialization 세션과는 독립적입니다.

개체 사용량
Serialization 공급자 개체는 자신을 사용자 지정 serialization 공급자로 추가할 수 있습니다. 이러한 공급자는 직렬 변환기를 찾는 데 사용되므로 직렬화 세션보다 오래 실행됩니다.

Session-Owned 상태

이 상태는 세션이 소유하고 세션이 제거되면 제거됩니다. 따라서 이 상태를 조작하는 속성이나 메서드에 액세스하면 serialization 관리자가 활성 세션에 없는 경우 예외가 발생합니다.

개체 사용량
ResolveName 이벤트 이벤트는 ResolveName 이름에 대한 추가 확인을 제공하기 위해 serializer에 의해 연결됩니다. 세션이 종료되면 모든 처리기가 이 이벤트에서 분리됩니다.
SerializationComplete 이벤트 이벤트는 SerializationComplete 세션이 삭제되기 직전에 발생합니다. 그런 다음 모든 처리기가 이 이벤트에서 분리됩니다.
이름 테이블 serialization 관리자는 개체와 해당 이름 사이에 매핑되는 테이블을 유지 관리합니다. 직렬 변환기는 쉽게 식별할 수 있는 개체 이름을 제공할 수 있습니다. 이 이름 테이블은 세션이 종료될 때 지워집니다.
Serializer 캐시 serialization 관리자는 제공하라는 요청을 받은 직렬 변환기의 캐시를 유지 관리합니다. 세션이 종료되면 이 캐시가 지워집니다. public GetSerializer 메서드는 언제든지 안전하게 호출할 수 있지만 해당 값은 세션 내에서 호출된 경우에만 캐시됩니다.
컨텍스트 스택 serialization 관리자는 속성으로 액세스할 수 있는 컨텍스트 스택이라는 개체를 Context 유지 관리합니다. 직렬 변환기는 이 스택을 사용하여 다른 직렬 변환기에서 사용할 수 있는 추가 정보를 저장할 수 있습니다. 예를 들어 속성 값을 serialize하는 serializer는 serialize할 값을 요청하기 전에 serialization 스택에서 속성 이름을 푸시할 수 있습니다. 세션이 종료되면 이 스택이 지워집니다.
오류 목록 serialization 관리자는 serialization 중에 발생한 오류 목록을 유지 관리합니다. 속성을 통해 Errors 액세스되는 이 목록은 세션이 종료될 때 지워집니다. 세션 간에 속성에 Errors 액세스하면 예외가 발생합니다.

생성자

DesignerSerializationManager()

DesignerSerializationManager 클래스의 새 인스턴스를 초기화합니다.

DesignerSerializationManager(IServiceProvider)

지정된 서비스 공급자를 사용하여 DesignerSerializationManager 클래스의 새 인스턴스를 초기화합니다.

속성

Container

이 serialization 관리자에 대한 컨테이너를 가져오거나 설정합니다.

Errors

serialization 또는 deserialization 도중 발생한 오류의 목록을 가져옵니다.

PreserveNames

CreateInstance(Type, ICollection, String, Boolean) 메서드가 컨테이너에 특정 이름이 존재하는지 확인할지 여부를 나타내는 값을 가져오거나 설정합니다.

PropertyProvider

serialization 관리자의 Properties 속성에 속성을 제공하는 데 사용할 개체를 가져옵니다.

RecycleInstances

CreateInstance(Type, ICollection, String, Boolean)가 항상 형식의 새 인스턴스를 만들지 여부를 나타내는 값을 가져오거나 설정합니다.

ValidateRecycledTypes

CreateInstance(Type, ICollection, String, Boolean) 메서드가 일치하는 이름이 동일한 형식을 참조하는지를 확인하는지 여부를 나타내는 값을 가져오거나 설정합니다.

메서드

CreateInstance(Type, ICollection, String, Boolean)

형식의 인스턴스를 만듭니다.

CreateSession()

새 serialization 세션을 만듭니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetRuntimeType(String)

지정된 형식 이름에 해당하는 형식을 가져옵니다.

GetSerializer(Type, Type)

지정된 개체 형식에 대한 serializer를 가져옵니다.

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)

사용자 지정 serialization 공급자를 serialization 관리자에 추가합니다.

IDesignerSerializationManager.Context

이 serialization 세션을 위한 컨텍스트 스택을 가져옵니다.

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

CreateInstance(Type, ICollection, String, Boolean) 메서드를 구현합니다.

IDesignerSerializationManager.GetInstance(String)

지정된 이름을 가진 생성된 개체의 인스턴스를 검색합니다.

IDesignerSerializationManager.GetName(Object)

지정된 개체의 이름을 검색합니다.

IDesignerSerializationManager.GetSerializer(Type, Type)

지정된 개체 형식에 대한 요청된 형식의 serializer를 가져옵니다.

IDesignerSerializationManager.GetType(String)

지정된 이름의 형식을 가져옵니다.

IDesignerSerializationManager.Properties

Properties 속성을 구현합니다.

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

이전에 추가한 serialization 공급자를 제거합니다.

IDesignerSerializationManager.ReportError(Object)

serialization에서 발생한 복구 가능 오류를 보고하는 데 사용됩니다.

IDesignerSerializationManager.ResolveName

IDesignerSerializationManager.GetName(Object)이 지정된 이름을 serialization 관리자의 이름 테이블에서 찾을 수 없을 때 발생합니다.

IDesignerSerializationManager.SerializationComplete

serialization이 완료되었을 때 발생합니다.

IDesignerSerializationManager.SetName(Object, String)

지정된 개체의 이름을 설정합니다.

IServiceProvider.GetService(Type)

이 멤버에 대한 설명을 보려면 GetService(Type) 메서드를 참조하세요.

적용 대상

추가 정보