XmlAttributes.XmlAnyElements Eigenschaft

Definition

Ruft die Auflistung der zu überschreibenden XmlAnyElementAttribute-Objekte ab.

C#
public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get; }

Eigenschaftswert

XmlAnyElementAttributes

Das XmlAnyElementAttributes, das die Auflistung der XmlAnyElementAttribute-Objekte darstellt.

Beispiele

Im folgenden Beispiel wird ein neues XmlAnyElementAttribute Objekt erstellt und der Auflistung von Objekten hinzugefügt, auf die über die XmlAnyElements Eigenschaft zugegriffen wird. Das XmlAttributes Objekt wird dann einem XmlAttributeOverrides Objekt hinzugefügt, das zum Erstellen eines XmlSerializer Objekts verwendet wird. Dies XmlSerializer wird verwendet, um ein Objekt serialisieren oder deserialisieren. Um den Effekt der Verwendung der XmlAnyElementAttributes Eigenschaft anzuzeigen, erstellen Sie ein XML-Dokument namens "UnknownElements.xml", indem Sie die SerializeObject Methode in der Main Methode ausführen. Bearbeiten Sie das resultierende Dokument, um andere (unbekannte) Elemente einzuschließen. Kommentieren Sie den SerializeObject Aufruf in der Main Methode, und heben Sie den Kommentar für die DeserializeObject Methode auf, wodurch der Name und wert eines unbekannten XML-Elements gedruckt wird.

C#
using System;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class Group{
   public string GroupName;
   [XmlAnyElement]
   public object[]Things;
}

public class Test{
   static void Main(){
      Test t = new Test();
      // 1 Run this and create the XML document.
      // 2 Add new elements to the XML document.
      // 3 Comment out the new line, and uncomment
      // the DeserializeObject line to deserialize the
      // XML document and see unknown elements.
      t.SerializeObject("UnknownElements.xml");
     
      // t.DeserializeObject("UnknownElements.xml");
   }

   private void SerializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof (Group));
      TextWriter writer = new StreamWriter(filename);
      Group g = new Group();
      g.GroupName = "MyGroup";
      ser.Serialize(writer, g);
      writer.Close();
   }

   private void DeserializeObject(string filename){

      XmlSerializer ser = CreateOverrideSerializer();
      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
     Group g = (Group)
        ser.Deserialize(fs);
     fs.Close();
     Console.WriteLine(g.GroupName);
     Console.WriteLine(g.Things.Length);
     foreach(XmlElement xelement in g.Things){
     Console.WriteLine(xelement.Name + ": " + xelement.InnerXml);
     }
   }

   private XmlSerializer CreateOverrideSerializer(){
      XmlAnyElementAttribute myAnyElement = 
      new XmlAnyElementAttribute();
      XmlAttributeOverrides xOverride = 
      new XmlAttributeOverrides();
      XmlAttributes xAtts = new XmlAttributes();
      xAtts.XmlAnyElements.Add(myAnyElement);
      xOverride.Add(typeof(Group), "Things", xAtts);
      return new XmlSerializer(typeof(Group) , xOverride);
   }
}

Hinweise

Dies XmlAnyElementAttribute kann auf ein Element angewendet werden, das ein Array von XmlElement Objekten zur Deserialisierung zurückgibt. Dies ermöglicht es XmlSerializer , alle Elemente zu deserialisieren, die nicht über ein entsprechendes Element im Objekt verfügen, das deserialisiert wird. Daher sind diese Elemente "unbekannt" für die XmlSerializer. Dies ist nützlich, wenn der XML-Datenstrom von einem XML-Webdienst geändert wurde, oder wenn bekannt ist, dass zufällige Daten immer im XML-Datenstrom enthalten sind.

Mit der XmlAnyElements Eigenschaft können Sie die Serialisierung eines Elements außer Kraft setzen, um als Element zu funktionieren, auf das die XmlAnyElementAttribute Anwendung angewendet wurde.

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