Auf Englisch lesen

Freigeben über


XmlAttributeOverrides Klasse

Definition

Ermöglicht das Überschreiben der Attribute von Eigenschaften, Feldern und Klassen beim Serialisieren oder Deserialisieren eines Objekts mit XmlSerializer.

C#
public class XmlAttributeOverrides
Vererbung
XmlAttributeOverrides

Beispiele

Das folgende Beispiel serialisiert eine Klasse namens , die ein einzelnes Feld Instruments enthältOrchestra, das ein Array von Instrument Objekten zurückgibt. Eine zweite Klasse namens Brass erbt von der Instrument Klasse. Im Beispiel wird eine Instanz der XmlAttributeOverrides Klasse verwendet, um das Instrument Feld außer Kraft zu setzen, sodass das Feld Objekte akzeptiert Brass .

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

Hinweise

Dies XmlAttributeOverrides ermöglicht das XmlSerializer Außerkraftsetzen der Standardweise der Serialisierung einer Gruppe von Objekten. Überschreiben der Serialisierung auf diese Weise verfügt über zwei Verwendungen: Zunächst können Sie die Serialisierung von Objekten steuern und erweitern, die in einer DLL gefunden wurden, auch wenn Sie keinen Zugriff auf die Quelle haben; Zweitens können Sie einen Satz serialisierbarer Klassen erstellen, aber die Objekte auf mehrere Arten serialisieren. Anstelle der Serialisierung von Elementen einer Klasseninstanz als XML-Elemente können Sie sie beispielsweise als XML-Attribute serialisieren, wodurch ein effizienteres Dokument zum Transport ermöglicht wird.

Nachdem Sie ein XmlAttributeOverrides Objekt erstellt haben, übergeben Sie es als Argument an den XmlSerializer Konstruktor. Das Ergebnis XmlSerializer verwendet die Daten, die von den XmlAttributeOverrides Attributen überschrieben werden, die steuern, wie Objekte serialisiert werden. Dazu enthält die XmlAttributeOverrides Auflistung der Objekttypen, die außer Kraft gesetzt werden, sowie ein XmlAttributes Objekt, das jedem überschriebenen Objekttyp zugeordnet ist. Das XmlAttributes Objekt selbst enthält einen entsprechenden Satz von Attributobjekten, die steuern, wie jedes Feld, die Eigenschaft oder klasse serialisiert wird.

Der Prozess zum Erstellen und Verwenden eines XmlAttributeOverrides Objekts ist wie folgt:

  1. Erstellen Sie ein XmlAttributes-Objekt.

  2. Erstellen Sie ein Attributobjekt, das für das Überschreiben des Objekts geeignet ist. Wenn Sie z. B. ein Feld oder eine Eigenschaft außer Kraft setzen möchten, erstellen Sie eine XmlElementAttribute, mithilfe des neuen, abgeleiteten Typs. Sie können optional einen neuen Namen Namespace oder einen neuen ElementNameNamen oder Namespace der Basisklasse außer Kraft setzen.

  3. Fügen Sie das Attributobjekt zur entsprechenden XmlAttributes Eigenschaft oder Auflistung hinzu. Sie würden beispielsweise die XmlElements Auflistung des XmlAttributes Objekts hinzufügenXmlElementAttribute, indem Sie den Elementnamen angeben, der überschrieben wird.

  4. Erstellen Sie ein XmlAttributeOverrides-Objekt.

  5. Fügen Sie mithilfe der Add Methode das XmlAttributes Objekt zum XmlAttributeOverrides Objekt hinzu. Wenn das Objekt außer Kraft gesetzt wird, XmlTypeAttributemüssen XmlRootAttribute Sie nur den Typ des überschriebenen Objekts angeben. Wenn Sie jedoch ein Feld oder eine Eigenschaft außer Kraft setzen, müssen Sie auch den Namen des überschriebenen Elements angeben.

  6. Übergeben Sie beim Erstellen des XmlSerializerKonstruktors den XmlAttributeOverrides XmlSerializer Konstruktor.

  7. Verwenden Sie die resultierende XmlSerializer Verwendung, um die abgeleiteten Klassenobjekte zu serialisieren oder zu deserialisieren.

Konstruktoren

XmlAttributeOverrides()

Initialisiert eine neue Instanz der XmlAttributeOverrides-Klasse.

Eigenschaften

Item[Type, String]

Ruft das dem angegebenen (Basisklassen-)Typ zugeordnete Objekt ab. Durch den member-Parameter wird der zu überschreibende Member der Basisklasse angegeben.

Item[Type]

Ruft das dem angegebenen Basisklassentyp zugeordnete Objekt ab.

Methoden

Add(Type, String, XmlAttributes)

Fügt der Auflistung von XmlAttributes-Objekten ein XmlAttributes-Objekt hinzu. Der type-Parameter gibt ein Objekt an, das überschrieben werden soll. Der member-Parameter gibt den Namen des zu überschreibenden Members an.

Add(Type, XmlAttributes)

Fügt der Auflistung von XmlAttributes-Objekten ein XmlAttributes-Objekt hinzu. Der type-Parameter gibt ein Objekt an, das vom XmlAttributes-Objekt überschrieben werden soll.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für

Produkt Versionen
.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

Siehe auch