Ler en inglés

Compartir por


XmlAttributeOverrides Clase

Definición

Permite reemplazar los atributos de las propiedades, campos y clases al utilizar XmlSerializer para serializar o deserializar un objeto.

C#
public class XmlAttributeOverrides
Herencia
XmlAttributeOverrides

Ejemplos

En el ejemplo siguiente se serializa una clase denominada Orchestra, que contiene un único campo denominado Instruments que devuelve una matriz de Instrument objetos . Una segunda clase denominada Brass hereda de la Instrument clase . En el ejemplo se usa una instancia de la XmlAttributeOverrides clase para invalidar el Instrument campo, lo que permite que el campo acepte Brass objetos.

C#
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);
      }
   }
}

Comentarios

XmlAttributeOverrides permite XmlSerializer invalidar la forma predeterminada de serializar un conjunto de objetos. La invalidación de la serialización de esta manera tiene dos usos: en primer lugar, puede controlar y aumentar la serialización de objetos que se encuentran en un archivo DLL, incluso si no tiene acceso al origen; en segundo lugar, puede crear un conjunto de clases serializables, pero serializar los objetos de varias maneras. Por ejemplo, en lugar de serializar miembros de una instancia de clase como elementos XML, puede serializarlos como atributos XML, lo que resulta en un documento más eficaz para el transporte.

Después de crear un XmlAttributeOverrides objeto, se pasa como argumento al XmlSerializer constructor. El resultado XmlSerializer usa los datos contenidos por para XmlAttributeOverrides invalidar los atributos que controlan cómo se serializan los objetos. Para ello, XmlAttributeOverrides contiene una colección de los tipos de objeto que se invalidan, así como un XmlAttributes objeto asociado a cada tipo de objeto invalidado. El XmlAttributes propio objeto contiene un conjunto adecuado de objetos de atributo que controlan cómo se serializa cada campo, propiedad o clase.

El proceso para crear y usar un XmlAttributeOverrides objeto es el siguiente:

  1. Cree un objeto XmlAttributes.

  2. Cree un objeto de atributo que sea adecuado para el objeto que se va a invalidar. Por ejemplo, para invalidar un campo o una propiedad, cree un XmlElementAttribute, mediante el nuevo tipo derivado. Opcionalmente, puede asignar un nuevo ElementNameo Namespace que invalide el nombre de atributo o el espacio de nombres de la clase base.

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

  4. Cree un objeto XmlAttributeOverrides.

  5. Con el Add método , agregue el XmlAttributes objeto al XmlAttributeOverrides objeto . Si el objeto que se invalida es o XmlRootAttribute XmlTypeAttribute, solo debe especificar el tipo del objeto invalidado. Pero si reemplaza un campo o propiedad, también debe especificar el nombre del miembro invalidado.

  6. Al construir , XmlSerializerpase al XmlAttributeOverrides XmlSerializer constructor .

  7. Utilice el resultado XmlSerializer para serializar o deserializar los objetos de clase derivadas.

Constructores

XmlAttributeOverrides()

Inicializa una nueva instancia de la clase XmlAttributeOverrides.

Propiedades

Item[Type, String]

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

Item[Type]

Obtiene el objeto asociado al tipo de clase base especificado.

Métodos

Add(Type, String, XmlAttributes)

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

Add(Type, XmlAttributes)

Agrega un objeto XmlAttributes a la colección de objetos XmlAttributes. El parámetro type especifica un objeto que va a ser reemplazado por el objeto XmlAttributes.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1
UWP 10.0

Consulte también