DesignerSerializationManager DesignerSerializationManager DesignerSerializationManager DesignerSerializationManager Class

Definición

Proporciona una implementación de la interfaz IDesignerSerializationManager.Provides an implementation of the IDesignerSerializationManager interface.

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
Herencia
DesignerSerializationManagerDesignerSerializationManagerDesignerSerializationManagerDesignerSerializationManager
Implementaciones

Comentarios

La IDesignerSerializationManager interfaz está diseñada para ser una interfaz independiente del formato a un objeto que controla la serialización.The IDesignerSerializationManager interface is designed to be a format-independent interface to an object that controls serialization. En esencia, proporciona contexto y servicios a los serializadores, que realmente realizan la deserialización.It essentially provides context and services to serializers, which actually perform the deserialization. IDesignerSerializationManagerayuda en el proceso de deserialización realizando un seguimiento de los objetos.IDesignerSerializationManager assists in the deserialization process by keeping track of objects. Esto es similar en lo que se IDesignerHost refiere a la interfaz: los diseñadores proporcionan realmente la interfaz de IDesignerHost usuario (UI) y proporcionan el pegamento que permite a los distintos diseñadores trabajar juntos.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.

La DesignerSerializationManager claseIDesignerSerializationManagerimplementa.The DesignerSerializationManager class implements IDesignerSerializationManager. Está diseñado para proporcionar una forma genérica de deserialización que es similar a los BinaryFormatterserializadores en tiempo de ejecución, como.It is designed to provide a generic form of deserialization that is similar to run-time serializers like the BinaryFormatter.

La DesignerSerializationManager clase logra tres objetivos:The DesignerSerializationManager class achieves three goals:

  • Es un objeto sencillo y llave en mano que se puede usar para deserializar una variedad de formatos.It is a simple, turnkey object that can be used to deserialize a variety of formats.

  • Es genérico y no está vinculado a ningún formato determinado.It is generic and not tied to any particular format. Se puede usar igualmente para la deserialización de CodeDOM y para la deserialización de marcado.It can be used equally for CodeDOM deserialization as well as markup deserialization.

  • Es extensible y admite diferentes métodos de serialización que se usan en los escenarios de copiar y pegar, y de deshacer y rehacer.It is extensible and supports different serialization methods that are used in copy/paste and undo/redo scenarios.

La serialización en tiempo de diseño tiene las siguientes diferencias con respecto a la serialización de objetos en tiempo de ejecución:Design-time serialization has the following differences from run-time object serialization:

  • El objeto que realiza la serialización suele ser independiente del objeto en tiempo de ejecución, por lo que se puede quitar la lógica en tiempo de diseño de un componente.The object performing the serialization is generally separate from the run-time object, so that design-time logic can be removed from a component.

  • El esquema de serialización supone que el objeto se creará completamente inicializado y, a continuación, se modificará a través de las llamadas a propiedades y métodos durante la deserialización.The serialization scheme assumes the object will be created fully initialized, and then modified through property and method invocations during deserialization.

  • Las propiedades de un objeto que tienen valores que nunca se establecieron en el objeto (las propiedades contienen los valores predeterminados) no se serializan.Properties of an object that have values that were never set on the object (the properties contain the default values) are not serialized. Por el contrario, la secuencia de deserialización puede tener huecos.Conversely, the deserialization stream may have holes.

  • El énfasis se aplica a la calidad del contenido dentro del flujo de serialización, en lugar de la serialización completa de un objeto.Emphasis is placed on the quality of the content within the serialization stream, rather than the full serialization of an object. Esto significa que, si no hay ninguna manera definida de serializar un objeto, ese objeto se puede omitir en lugar de producir una excepción.This means that if there is no defined way to serialize an object, that object may be skipped rather than throwing an exception. El motor de serialización puede proporcionar heurística aquí para decidir qué errores se pueden omitir y cuáles son irrecuperables.The serialization engine may provide heuristics here to decide which failures can be ignored and which are unrecoverable.

  • Es posible que la secuencia de serialización tenga más datos de los necesarios para la deserialización.The serialization stream may have more data than is needed for deserialization. La serialización de código fuente, por ejemplo, tiene código de usuario mezclado con el código necesario para deserializar un gráfico de objetos.Source code serialization, for example, has user code mixed in with the code needed to deserialize an object graph. Este código de usuario se debe omitir en la deserialización y conservarse en la serialización.This user code must be ignored on deserialization and preserved on serialization.

Debido a estas diferencias, se aplica un modelo de serialización diferente a la serialización en tiempo de diseño.Because of these differences, a different serialization model applies to design-time serialization. Este modelo emplea un objeto serializador independiente para cada tipo de datos que se está serializando.This model utilizes a separate serializer object for each data type being serialized. Cada serializador proporciona su pequeña contribución al problema en su conjunto.Each serializer provides its small contribution to the problem as a whole. Estos serializadores se coordinan a través de un administrador de serialización común.These serializers are all coordinated through a common serialization manager. El administrador de serialización es responsable de mantener el estado entre estos serializadores diferentes.The serialization manager is responsible for maintaining state between these different serializers. Como ejemplo, considere la siguiente clase:As an example, consider the following 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; }
    }
}
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 

Una instancia de esta clase usaría tres serializadores diferentes: uno para SampleObject, uno para las cadenas y otro para los enteros.An instance of this class would utilize three different serializers: one for SampleObject, one for strings, and another for integers. El serializador para SampleObject se denomina serializador raíz porque SampleObject es la raíz del gráfico de serialización.The serializer for SampleObject is called the root serializer because SampleObject is the root of the serialization graph. También se pueden crear gráficos de objetos más complejos.More complex object graphs can be created as well. Por ejemplo, considere qué ocurriría si SampleObject se cambiara de la siguiente manera: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; }
    }
}
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 

Esto permite SampleObject tener un elemento secundario que sea otra instancia de sí mismo.This allows SampleObject to have a child that is another instance of itself. El código siguiente rellena el gráfico de objetos:The following code fills in the object graph:

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

Cuando root se serializa, se usan cuatro serializadores: un serializador raíz, un serializador para el elemento secundario SampleObject, un serializador para inty un serializador para string.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. Los serializadores se almacenan en caché en función del tipo, por lo que no es necesario crear un serializador SampleObjectpara cada instancia de.Serializers are cached based on type, so there is no need to create a serializer for each instance of SampleObject.

La DesignerSerializationManager clase se basa en la idea de una sesión de serialización.The DesignerSerializationManager class is based on the idea of a serialization session. Una sesión mantiene el estado al que pueden tener acceso los distintos serializadores.A session maintains state that can be accessed by the various serializers. Cuando se desecha una sesión, se destruye este estado.When a session is disposed, this state is destroyed. Esto ayuda a garantizar que los serializadores permanecen sin estado y ayuda a limpiar los serializadores que están dañados.This helps to ensure that serializers remain largely stateless, and helps to clean up serializers that are have been corrupted. En las tablas siguientes se describe cómo se administra el estado en y entre sesiones.The following tables describe how state is managed in and among sessions.

Estado globalGlobal State

Este estado es propiedad del objeto de administrador de serialización, pero es independiente de la sesión de serialización actual.This state is owned by the serialization manager object, but is independent of the current serialization session.

ObjectObject UsoUsage
Proveedores de serializaciónSerialization providers Los objetos se pueden agregar a sí mismos como proveedores de serialización personalizados.Objects can add themselves as custom serialization providers. Dado que estos proveedores se usan para buscar serializadores, durar más una sesión de serialización.Because these providers are used to locate serializers, they outlive a serialization session.

Estado propiedad de la sesiónSession-Owned State

Este estado es propiedad de una sesión y se destruye cuando se destruye una sesión.This state is owned by a session and is destroyed when a session is destroyed. Por consiguiente, el acceso a cualquier propiedad o método que manipule este estado producirá una excepción si el administrador de serialización no está en una sesión activa.Consequently, accessing any properties or methods that would manipulate this state will throw an exception if the serialization manager is not in an active session.

ObjectObject UsoUsage
EventoResolveNameResolveName event Un ResolveName serializador adjunta el evento para proporcionar una resolución adicional de los nombres.The ResolveName event is attached by a serializer to provide additional resolution of names. Todos los controladores se desasocian de este evento cuando finaliza una sesión.All handlers are detached from this event when a session terminates.
EventoSerializationCompleteSerializationComplete event El SerializationComplete evento se genera justo antes de que se elimine una sesión.The SerializationComplete event is raised just before a session is disposed. A continuación, todos los controladores se desasocian de este evento.Then, all handlers are detached from this event.
Tabla de nombresName table El administrador de serialización mantiene una tabla que se asigna entre los objetos y sus nombres.The serialization manager maintains a table that maps between objects and their names. Los serializadores pueden proporcionar nombres de objetos para facilitar su identificación.Serializers may give objects names for easy identification. Esta tabla de nombres se borra cuando finaliza la sesión.This name table is cleared when the session terminates.
Caché del serializadorSerializer cache El administrador de serialización mantiene una memoria caché de serializadores que se le ha solicitado que proporcione.The serialization manager maintains a cache of serializers it has been asked to supply. Esta memoria caché se borra cuando finaliza la sesión.This cache is cleared when the session terminates. Se puede GetSerializer llamar al método público de forma segura en cualquier momento, pero su valor se almacena en caché solo si se llama desde dentro de una sesión.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.
Pila de contextoContext stack El administrador de serialización mantiene un objeto denominado pila de contexto, al que se puede tener Context acceso con la propiedad.The serialization manager maintains an object called the context stack, which you can access with the Context property. Los serializadores pueden utilizar esta pila para almacenar información adicional que está disponible para otros serializadores.Serializers can use this stack to store additional information that is available to other serializers. Por ejemplo, un serializador que está serializando un valor de propiedad puede incluir el nombre de la propiedad en la pila de serialización antes de solicitar el valor que se va a serializar.For example, a serializer that is serializing a property value can push the property name on the serialization stack before asking the value to serialize. Esta pila se borra cuando finaliza la sesión.This stack is cleared when the session is terminated.
Lista de erroresError list El administrador de serialización mantiene una lista de los errores que se produjeron durante la serialización.The serialization manager maintains a list of errors that occurred during serialization. Esta lista, a la que se tiene acceso Errors a través de la propiedad, se borra cuando finaliza la sesión.This list, which is accessed through the Errors property, is cleared when the session is terminated. El acceso a Errors la propiedad entre sesiones producirá una excepción.Accessing the Errors property between sessions will result in an exception.

Constructores

DesignerSerializationManager() DesignerSerializationManager() DesignerSerializationManager() DesignerSerializationManager()

Inicializa una nueva instancia de la clase DesignerSerializationManager.Initializes a new instance of the DesignerSerializationManager class.

DesignerSerializationManager(IServiceProvider) DesignerSerializationManager(IServiceProvider) DesignerSerializationManager(IServiceProvider) DesignerSerializationManager(IServiceProvider)

Inicializa una nueva instancia de la clase DesignerSerializationManager con el proveedor de servicios especificado.Initializes a new instance of the DesignerSerializationManager class with the given service provider.

Propiedades

Container Container Container Container

Obtiene o establece el contenedor para este administrador de serialización.Gets or sets to the container for this serialization manager.

Errors Errors Errors Errors

Obtiene la lista de los errores que se han producido durante la serialización o deserialización.Gets the list of errors that occurred during serialization or deserialization.

PreserveNames PreserveNames PreserveNames PreserveNames

Obtiene o establece un valor que indica si el método CreateInstance(Type, ICollection, String, Boolean) debe comprobar la presencia del nombre especificado en el contenedor.Gets or sets a value indicating whether the CreateInstance(Type, ICollection, String, Boolean) method should check for the presence of the given name in the container.

PropertyProvider PropertyProvider PropertyProvider PropertyProvider

Obtiene el objeto que se debe utilizar para proporcionar propiedades a la propiedad Properties del administrador de serialización.Gets the object that should be used to provide properties to the serialization manager's Properties property.

RecycleInstances RecycleInstances RecycleInstances RecycleInstances

Obtiene o establece un valor que indica si CreateInstance(Type, ICollection, String, Boolean) va a crear siempre una nueva instancia de un tipo.Gets or sets a value that indicates whether CreateInstance(Type, ICollection, String, Boolean) will always create a new instance of a type.

ValidateRecycledTypes ValidateRecycledTypes ValidateRecycledTypes ValidateRecycledTypes

Obtiene o establece un valor que indica si el método CreateInstance(Type, ICollection, String, Boolean) va a comprobar que los nombres coincidentes hagan referencia al mismo tipo.Gets or sets a value that indicates whether the CreateInstance(Type, ICollection, String, Boolean) method will verify that matching names refer to the same type.

Métodos

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

Crea una instancia de un tipo.Creates an instance of a type.

CreateSession() CreateSession() CreateSession() CreateSession()

Crea una nueva sesión de serialización.Creates a new serialization session.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetRuntimeType(String) GetRuntimeType(String) GetRuntimeType(String) GetRuntimeType(String)

Obtiene el tipo que se corresponde con el nombre de tipo especificado.Gets the type corresponding to the specified type name.

GetSerializer(Type, Type) GetSerializer(Type, Type) GetSerializer(Type, Type) GetSerializer(Type, Type)

Obtiene el serializador para el tipo de objeto especificado.Gets the serializer for the given object type.

GetService(Type) GetService(Type) GetService(Type) GetService(Type)

Obtiene el servicio solicitado.Gets the requested service.

GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
GetType(String) GetType(String) GetType(String) GetType(String)

Obtiene el tipo solicitado.Gets the requested type.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
OnResolveName(ResolveNameEventArgs) OnResolveName(ResolveNameEventArgs) OnResolveName(ResolveNameEventArgs) OnResolveName(ResolveNameEventArgs)

Genera el evento ResolveName.Raises the ResolveName event.

OnSessionCreated(EventArgs) OnSessionCreated(EventArgs) OnSessionCreated(EventArgs) OnSessionCreated(EventArgs)

Genera el evento SessionCreated.Raises the SessionCreated event.

OnSessionDisposed(EventArgs) OnSessionDisposed(EventArgs) OnSessionDisposed(EventArgs) OnSessionDisposed(EventArgs)

Genera el evento SessionDisposed.Raises the SessionDisposed event.

ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Eventos

SessionCreated SessionCreated SessionCreated SessionCreated

Tiene lugar cuando se crea una sesión.Occurs when a session is created.

SessionDisposed SessionDisposed SessionDisposed SessionDisposed

Se produce cuando se desecha una sesión.Occurs when a session is disposed.

Implementaciones de interfaz explícitas

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Agrega un proveedor de serialización personalizado al administrador de serialización.Adds a custom serialization provider to the serialization manager.

IDesignerSerializationManager.Context IDesignerSerializationManager.Context IDesignerSerializationManager.Context IDesignerSerializationManager.Context

Obtiene la pila de contexto para esta sesión de serialización.Gets the context stack for this serialization session.

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

Implementa el método CreateInstance(Type, ICollection, String, Boolean).Implements the CreateInstance(Type, ICollection, String, Boolean) method.

IDesignerSerializationManager.GetInstance(String) IDesignerSerializationManager.GetInstance(String) IDesignerSerializationManager.GetInstance(String) IDesignerSerializationManager.GetInstance(String)

Recupera una instancia de un objeto creado con el nombre especificado.Retrieves an instance of a created object of the specified name.

IDesignerSerializationManager.GetName(Object) IDesignerSerializationManager.GetName(Object) IDesignerSerializationManager.GetName(Object) IDesignerSerializationManager.GetName(Object)

Recupera un nombre para el objeto especificado.Retrieves a name for the specified object.

IDesignerSerializationManager.GetSerializer(Type, Type) IDesignerSerializationManager.GetSerializer(Type, Type) IDesignerSerializationManager.GetSerializer(Type, Type) IDesignerSerializationManager.GetSerializer(Type, Type)

Obtiene un serializador del tipo solicitado para el tipo de objeto especificado.Gets a serializer of the requested type for the specified object type.

IDesignerSerializationManager.GetType(String) IDesignerSerializationManager.GetType(String) IDesignerSerializationManager.GetType(String) IDesignerSerializationManager.GetType(String)

Obtiene un tipo del nombre especificado.Gets a type of the specified name.

IDesignerSerializationManager.Properties IDesignerSerializationManager.Properties IDesignerSerializationManager.Properties IDesignerSerializationManager.Properties

Implementa la propiedad Properties.Implements the Properties property.

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider) IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Quita un proveedor de serialización agregado anteriormente.Removes a previously added serialization provider.

IDesignerSerializationManager.ReportError(Object) IDesignerSerializationManager.ReportError(Object) IDesignerSerializationManager.ReportError(Object) IDesignerSerializationManager.ReportError(Object)

Se utiliza para crear un informe de error recuperable en la serialización.Used to report a recoverable error in serialization.

IDesignerSerializationManager.ResolveName IDesignerSerializationManager.ResolveName IDesignerSerializationManager.ResolveName IDesignerSerializationManager.ResolveName

Tiene lugar cuando IDesignerSerializationManager.GetName(Object) no puede encontrar el nombre especificado en la tabla de nombres del administrador de serialización.Occurs when IDesignerSerializationManager.GetName(Object) cannot locate the specified name in the serialization manager's name table.

IDesignerSerializationManager.SerializationComplete IDesignerSerializationManager.SerializationComplete IDesignerSerializationManager.SerializationComplete IDesignerSerializationManager.SerializationComplete

Se produce al finalizar la serialización.Occurs when serialization is complete.

IDesignerSerializationManager.SetName(Object, String) IDesignerSerializationManager.SetName(Object, String) IDesignerSerializationManager.SetName(Object, String) IDesignerSerializationManager.SetName(Object, String)

Establece el nombre para el objeto especificado.Sets the name for the specified object.

IServiceProvider.GetService(Type) IServiceProvider.GetService(Type) IServiceProvider.GetService(Type) IServiceProvider.GetService(Type)

Para obtener una descripción de este miembro, vea el método GetService(Type).For a description of this member, see the GetService(Type) method.

Se aplica a

Consulte también: