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

El 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. Básicamente proporciona contexto y los servicios a los serializadores, que realmente realizan la deserialización.It essentially provides context and services to serializers, which actually perform the deserialization. IDesignerSerializationManager Ayuda en el proceso de deserialización mediante el seguimiento de los objetos.IDesignerSerializationManager assists in the deserialization process by keeping track of objects. Esto es similar a la IDesignerHost interfaz: diseñadores realmente proporcionan la interfaz de usuario (IU), y IDesignerHost proporciona el elemento aglutinador que permite a los diseñadores diferentes que funcionan conjuntamente.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.

El DesignerSerializationManager la clase implementa IDesignerSerializationManager.The DesignerSerializationManager class implements IDesignerSerializationManager. Está diseñado para proporcionar un formulario genérico de deserialización que es similar a los serializadores de tiempo de ejecución, como el BinaryFormatter.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 simple 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án vinculados a un formato concreto.It is generic and not tied to any particular format. Se puede usar igualmente para la deserialización de CodeDOM, así como la deserialización de marcado.It can be used equally for CodeDOM deserialization as well as markup deserialization.

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

Serialización en tiempo de diseño tiene las siguientes diferencias de la serialización del objeto de tiempo de ejecución:Design-time serialization has the following differences from run-time object serialization:

  • Objeto que realiza la serialización es generalmente independiente desde el objeto de tiempo de ejecución, para que un componente puede quitarse la lógica en tiempo de diseño.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 se da por supuesto que el objeto se crearán totalmente inicializado y, a continuación, puede modificar a través de las llamadas de propiedad y método 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.

  • No se serializan las propiedades de un objeto que tienen valores que nunca se establecieron en el objeto (las propiedades contienen los valores predeterminados).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 lagunas.Conversely, the deserialization stream may have holes.

  • Se hace hincapié en la calidad del contenido dentro de la secuencia 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 para serializar un objeto, se puede omitir ese objeto 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 aquí la heurística 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.

  • La secuencia de serialización puede tener más datos que se necesita para la deserialización.The serialization stream may have more data than is needed for deserialization. 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 conservar 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 para la serialización en tiempo de diseño.Because of these differences, a different serialization model applies to design-time serialization. Este modelo utiliza un objeto de 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 realiza su pequeña contribución para el problema como un todo.Each serializer provides its small contribution to the problem as a whole. Estos serializadores todos están coordinados a través de un administrador de serialización comunes.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. Por 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 utilizaría tres serializadores diferentes: uno para SampleObject, uno para las cadenas y otro para números 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 el 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 lo que sucedería si SampleObject se cambiaron como sigue: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 para tener un elemento secundario que es 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, habrá cuatro serializadores personalizados utilizados: serializador una 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é según el tipo, por lo que no hay ninguna necesidad de crear un serializador para cada instancia de SampleObject.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 que puede tener acceso a los serializadores distintos.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 permanezcan en gran medida sin estado, y ayuda a limpiar los serializadores que se esté dañado.This helps to ensure that serializers remain largely stateless, and helps to clean up serializers that are have been corrupted. Las tablas siguientes describen cómo se administra el estado en y entre las 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 Objetos se pueden agregar a sí mismos como proveedores de serialización personalizada.Objects can add themselves as custom serialization providers. Dado que estos proveedores se usan para buscar serializadores, sobreviven a una sesión de serialización.Because these providers are used to locate serializers, they outlive a serialization session.

Estado de 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 lo tanto, tener acceso a las propiedades o métodos que manipulan 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
EventoResolveName ResolveName event El ResolveName eventos se adjunta un serializador para proporcionar la resolución de nombres adicional.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.
EventoSerializationComplete SerializationComplete event El SerializationComplete evento se genera justo antes de que se desecha 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 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.
Memoria caché del serializadorSerializer cache El Administrador de serialización mantiene una caché de serializadores que se le ha pedido que proporcione.The serialization manager maintains a cache of serializers it has been asked to supply. Esta caché se borra cuando finaliza la sesión.This cache is cleared when the session terminates. El público GetSerializer método puede llamar 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 que llama a la pila de contexto, que puede tener acceso con el Context 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 se está serializando un valor de propiedad puede insertar el nombre de propiedad en la pila de serialización antes de solicitar el valor se debe 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. La 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 errores producidos durante la serialización.The serialization manager maintains a list of errors that occurred during serialization. Esta lista, que se accede mediante el Errors propiedad, se borra cuando se termina la sesión.This list, which is accessed through the Errors property, is cleared when the session is terminated. Obtener acceso a la Errors propiedad entre sesiones se 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 DesignerSerializationManager clase con el proveedor de servicio determinado.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 errores producidos 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 CreateInstance(Type, ICollection, String, Boolean) método 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 usar para proporcionar propiedades para el Administrador de serialización Properties propiedad.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 correspondiente al nombre del 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 determinado.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 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

Se produce 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 el Properties propiedad.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 usan para notificar un 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 del 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: