Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase XmlAttributeOverrides

 

Publicado: octubre de 2016

Le permite reemplazar las propiedades, campos y atributos de la clase cuando se utiliza el XmlSerializer para serializar o deserializar un objeto.

Espacio de nombres:   System.Xml.Serialization
Ensamblado:  System.Xml (en System.Xml.dll)

System.Object
  System.Xml.Serialization.XmlAttributeOverrides

public class XmlAttributeOverrides

NombreDescripción
System_CAPS_pubmethodXmlAttributeOverrides()

Inicializa una nueva instancia de la clase XmlAttributeOverrides.

NombreDescripción
System_CAPS_pubpropertyItem[Type]

Obtiene el objeto asociado al tipo especificado, la clase base.

System_CAPS_pubpropertyItem[Type, String]

Obtiene el objeto asociado con el tipo (clase base) especificado. El parámetro de miembro especifica al miembro de clase base que se reemplaza.

NombreDescripción
System_CAPS_pubmethodAdd(Type, String, XmlAttributes)

Agrega un XmlAttributes objeto a la colección de XmlAttributes objetos. El type parámetro especifica un objeto que sea reemplazado. El member parámetro especifica el nombre de un miembro que se reemplaza.

System_CAPS_pubmethodAdd(Type, XmlAttributes)

Agrega un XmlAttributes objeto a la colección de XmlAttributes objetos. El type parámetro especifica un objeto que sea reemplazada por la XmlAttributes objeto.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

El XmlAttributeOverrides permite el XmlSerializer para reemplazar el modo predeterminado de serialización de un conjunto de objetos. Reemplazo de la serialización de esta manera: en primer lugar, puede controlar y aumentar la serialización de los objetos detectados en una DLL, incluso si no tiene acceso al origen; en segundo lugar, puede crear un conjunto de clases serializables y serializar los objetos de varias maneras. Por ejemplo, en lugar de serializar los miembros de una instancia de clase como elementos XML, puede serializar ellos como atributos XML, lo que resulta en un documento más eficaz al transporte.

Después de crear un XmlAttributeOverrides de objeto, se pasa como argumento a la XmlSerializer constructor. Resultante XmlSerializer utiliza los datos incluidos en el XmlAttributeOverrides para reemplazar los atributos que controlan cómo se serializan los objetos. Para lograr esto, la XmlAttributeOverrides contiene una colección de los tipos de objetos que se reemplazan, así como un XmlAttributes objeto asociado a cada tipo de objeto reemplazado. El XmlAttributes propio objeto contiene un conjunto apropiado de objetos de atributos que controlan cómo se serializa cada campo, propiedad o clase.

El proceso para crear y usar un XmlAttributeOverrides objeto es como sigue:

  1. Crear un XmlAttributes objeto.

  2. Crear un objeto de atributo que sea adecuado para el objeto que se está reemplazando. Por ejemplo, para reemplazar un campo o propiedad, cree un XmlElementAttribute, utilizando el nuevo tipo derivado. Opcionalmente, puede asignar un nuevo ElementName, o Namespace que reemplaza el nombre de atributo o espacio de nombres de la clase base.

  3. Agregue el objeto de atributo correspondiente XmlAttributes propiedad o la colección. Por ejemplo, agregaría el XmlElementAttribute a la XmlElements colección de la XmlAttributes objeto, especificando el nombre del miembro que se está reemplazando.

  4. Crear un XmlAttributeOverrides objeto.

  5. Mediante el Add método, agregue el XmlAttributes objeto la XmlAttributeOverrides objeto. Si el objeto que se está reemplazando es un XmlRootAttribute o XmlTypeAttribute, sólo debe especificar el tipo de objeto reemplazado. Pero si va a reemplazar un campo o propiedad, también debe especificar el nombre del miembro reemplazado.

  6. Al construir el XmlSerializer, pasar la XmlAttributeOverrides a la XmlSerializer constructor.

  7. Utilice resultante XmlSerializer para serializar o deserializar los objetos de la clase derivada.

El siguiente ejemplo serializa una clase denominada Orchestra, que contiene un solo campo denominado Instruments que devuelve una matriz de Instrument objetos. Una segunda clase denominada Brass hereda de la Instrument clase. En el ejemplo se utiliza una instancia de la XmlAttributeOverrides clase reemplace el Instrument campo, permitiendo que éste acepte Brass objetos.

using System;
using System.IO;
using System.Xml.Serialization;

public class Orchestra
{
   public Instrument[] Instruments;
}   

public class Instrument
{
   public string Name;
}

public class Brass:Instrument
{
   public bool IsValved;
}

public class Run
{
    public static void Main()
    {
       Run test = new Run();
       test.SerializeObject("Override.xml");
       test.DeserializeObject("Override.xml");
    }

    public void SerializeObject(string filename)
    {
      /* Each overridden field, property, or type requires 
      an XmlAttributes object. */
      XmlAttributes attrs = new XmlAttributes();

      /* Create an XmlElementAttribute to override the 
      field that returns Instrument objects. The overridden field
      returns Brass objects instead. */
      XmlElementAttribute attr = new XmlElementAttribute();
      attr.ElementName = "Brass";
      attr.Type = typeof(Brass);

      // Add the element to the collection of elements.
      attrs.XmlElements.Add(attr);

      // Create the XmlAttributeOverrides object.
      XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();

      /* Add the type of the class that contains the overridden 
      member and the XmlAttributes to override it with to the 
      XmlAttributeOverrides object. */
      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s = 
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      // Writing the file requires a TextWriter.
      TextWriter writer = new StreamWriter(filename);

      // Create the object that will be serialized.
      Orchestra band = new Orchestra();

      // Create an object of the derived type.
      Brass i = new Brass();
      i.Name = "Trumpet";
      i.IsValved = true;
      Instrument[] myInstruments = {i};
      band.Instruments = myInstruments;

      // Serialize the object.
      s.Serialize(writer,band);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      XmlAttributeOverrides attrOverrides = 
         new XmlAttributeOverrides();
      XmlAttributes attrs = new XmlAttributes();

      // Create an XmlElementAttribute to override the Instrument.
      XmlElementAttribute attr = new XmlElementAttribute();
      attr.ElementName = "Brass";
      attr.Type = typeof(Brass);

      // Add the XmlElementAttribute to the collection of objects.
      attrs.XmlElements.Add(attr);

      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s = 
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      FileStream fs = new FileStream(filename, FileMode.Open);
      Orchestra band = (Orchestra) s.Deserialize(fs);
      Console.WriteLine("Brass:");

      /* The difference between deserializing the overridden 
      XML document and serializing it is this: To read the derived 
      object values, you must declare an object of the derived type 
      (Brass), and cast the Instrument instance to it. */
      Brass b;
      foreach(Instrument i in band.Instruments) 
      {
         b = (Brass)i;
         Console.WriteLine(
         b.Name + "\n" + 
         b.IsValved);
      }
   }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: