Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

DesignerSerializationManager Classe

Provides an implementation of the IDesignerSerializationManager interface.

Namespace:  System.ComponentModel.Design.Serialization
Assembly:  System.Design (em System.Design. dll)

public class DesignerSerializationManager : IDesignerSerializationManager, 
	IServiceProvider

The IDesignerSerializationManager interface is designed to be a format-independent interface to an object that controls serialization.It essentially provides context and services to serializers, which actually perform the deserialization. IDesignerSerializationManager assists in the deserialization process by keeping track of objects.This is similar in technique to the IDesignerHost interface: designers actually provide the user interface (UI), and IDesignerHost provides the glue that allows different designers to work together.

The DesignerSerializationManager class implements IDesignerSerializationManager.It is designed to provide a generic form of deserialization that is similar to run-time serializers like the BinaryFormatter.

The DesignerSerializationManager class achieves three goals:

  • Ele é um objeto simples, fechado que pode ser usado para desserializar uma variedade de formatos.

  • It is genérico and not tied to Any particular Formatar.Ele pode ser usado igualmente para desserialização CodeDOM assim como a desserialização de marcação.

  • Ele é extensível e oferece suporte a serialização diferentes métodos que são usados em cenários copiar/colar e desfazer ou refazer.

A serialização de tempo de design tem as seguintes diferenças de serialização objeto em tempo de execução:

  • O objeto executando a serialização é geralmente separado do objeto em tempo de execução, para que a lógica de tempo de design pode ser removida de um componente.

  • The esquema serialização assumes the objeto will be Criado fully initialized, and then Modified through invocations propriedade and método During desserialização.

  • As propriedades de um objeto que possuem valores que nunca foram definidos no objeto (as propriedades contêm os valores padrão) Não São serializadas.Inversamente, o fluxo de desserialização pode ter desvios.

  • Emphasis is placed on the qualidade of the de conteúdo within the transmitir serialização, rather than the Completo serialização of an objeto.This means that if there é não defined way to serializar an objeto, that objeto may be SKIPPED rather than throwing an exceção.O mecanismo de serialização pode fornecer heurísticos aqui para decidir quais falhas podem ser ignoradas e quais são irrecuperável.

  • O fluxo de serialização pode ter mais dados do que é necessário para desserialização.Fonte Código serialização, de exemplo, tem usuário Código mista com o Código necessários para desserializar um objeto Graph.This Código do Usuário must be ignored on desserialização and Preserved on serialização.

Because of these differences, a modelo serialização different Aplica-se a design-tempo serialização.Esse modelo utiliza um objeto serializador separada para cada tipo de dados seja serializado.Each serializador Provides its Pequeno Contribution to the problem as a Whole.These serializers are all Coordinated Através a .The serialização Gerente is responsible for Maintaining estado between these serializers different.Como um exemplo, considere a seguinte classe:

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; }
    }
}


Uma instância desta classe seria utilizar três serializers diferentes: one for SampleObject, one for strings, and another for integers.The serializer for SampleObject is called the root serializer because SampleObject is the root of the serialization graph.Os gráficos mais complexos de objeto podem ser criados assim.For example, consider what would happen if SampleObject were changed as follows:

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; }
    }
}


This allows SampleObject to have a child that is another instance of itself.O código a seguir preenche o objeto gráfico:

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;
        }
    }
}


When root is serialized, there will be four serializers used: one root serializer, one serializer for the child SampleObject, one serializer for int, and one serializer for string.Serializers are cached based on type, so there is no need to create a serializer for each instance of SampleObject.

The DesignerSerializationManager class is based on the idea of a serialization session.Estado que pode ser acessado por mantém uma sessão de Diversos serializers.Quando uma sessão é descartada, esse estado é destruído.This helps to ensure that serializers remain largely Stateless, and helps to Apagar up serializers that are have been corrompido.As tabelas a seguir descrevem como estado é gerenciado no e entre as sessões.

Estado global

This estado is owned by the serialização Gerente objeto, but is Independent of the atual sessão serialização.

Object

USAGE

Provedores de serialização

Objetos can adicionar Themselves as personalizado providers serialização.Como esses provedores são usados para localizar serializers, eles outlive uma sessão de serialização.

Estado de Sessão-Propriedade

Esse estado é de propriedade de uma sessão e é destruído quando uma sessão é destruída.Accessing any Properties or Methods that would Manipulate this will consequently, Gerar uma Exceção If the is not in an .

Object

USAGE

ResolveName event

The ResolveName event is attached by a serializer to provide additional resolution of names.Tudo handlers are detached from this evento When terminates a sessão.

SerializationComplete event

The SerializationComplete event is raised just before a session is disposed.Em seguida, Tudo manipuladores são desanexados deste evento.

Tabela de nomes

The Gerenciador serialização maintains a Tabela that Maps between objects and their Names.Serializers podem atribuir nomes objetos para fácil identificação.Esta tabela de nomes é limpo quando a sessão termina.

Cache serializador

The serialização Gerente maintains a armazenar em cache of serializers it has been asked to fornecer.Esse cache é limpo quando a sessão termina.The public GetSerializer method can safely be called at any time, but its value is cached only if it is called from within a session.

Pilha de contexto

The serialization manager maintains an object called the context stack, which you can access with the Context property.Serializers can use this pilha to armazenar informações Additional that is disponível to Outro serializers.Por exemplo, um serializador que está serializando um valor da propriedade pode pressionar o nome da propriedade na pilha de serialização antes solicitando o valor para serializar.This pilha is Cleared when the sessão is Encerrado.

Lista de erros

The maintains a Lista of Errors that occurred During .This list, which is accessed through the Errors property, is cleared when the session is terminated.Accessing the Errors property between sessions will result in an exception.

System.Object
  System.ComponentModel.Design.Serialization.DesignerSerializationManager

Quaisquer membros públicos estático (compartilhados na Visual Basic) desse tipo são Thread seguro. Não há garantia de que qualquer membro de instância seja isento de segmentos.

Contribuições da comunidade

ADICIONAR
Mostrar: