XmlAttributes.XmlAnyElements Tulajdonság

Definíció

Lekéri a felülbírálandó objektumok gyűjteményét XmlAnyElementAttribute .

public:
 property System::Xml::Serialization::XmlAnyElementAttributes ^ XmlAnyElements { System::Xml::Serialization::XmlAnyElementAttributes ^ get(); };
public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get; }
member this.XmlAnyElements : System.Xml.Serialization.XmlAnyElementAttributes
Public ReadOnly Property XmlAnyElements As XmlAnyElementAttributes

Tulajdonság értéke

Objektum XmlAnyElementAttributes , amely az objektumok gyűjteményét XmlAnyElementAttribute jelöli.

Példák

Az alábbi példa létrehoz egy új XmlAnyElementAttribute objektumot, és hozzáadja a tulajdonságon keresztül elért objektumok gyűjteményéhez XmlAnyElements . Ezután XmlAttributes hozzáadja az objektumot egy XmlAttributeOverrides objektum létrehozásához XmlSerializer használt objektumhoz. Az XmlSerializer objektum szerializálására vagy deszerializálására szolgál. A tulajdonság használatának XmlAnyElementAttributes hatásának megtekintéséhez hozzon létre egy "UnknownElements.xml" nevű XML-dokumentumot a SerializeObjectMain metódus metódusban való futtatásával. Szerkessze az eredményként kapott dokumentumot más (ismeretlen) elemek belefoglalásához. A metódusban megjegyzést fűzhet a SerializeObjectMain híváshoz, és feloldhatja a DeserializeObject metódushoz való meghívást, amely kiírja az ismeretlen XML-elemek nevét és értékét.

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);
   }
}
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml

Public Class Group
   Public GroupName As String 
   <XmlAnyElement> _
   Public Things () As object
End Class

Public Class Test
   Shared Sub Main()
      Dim t As Test = 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")
   End Sub

   Private Sub SerializeObject(filename As String)
      Dim ser As XmlSerializer = New XmlSerializer(GetType (Group))
      Dim writer As TextWriter = New StreamWriter(filename)
      
      Dim g As Group = New Group()
      g.GroupName = "MyGroup"
      ser.Serialize(writer, g)
      writer.Close()
   End Sub

   
   Private Sub DeserializeObject(filename As String)

      Dim ser As XmlSerializer = CreateOverrideSerializer()
      ' A FileStream is needed to read the XML document.
      Dim fs As FileStream = New FileStream(filename, FileMode.Open)
     Dim g As Group = CType( _
        ser.Deserialize(fs), Group)
     fs.Close()
     Console.WriteLine(g.GroupName)
     Console.WriteLine(g.Things.Length)
     Dim xelement As XmlELement
     for each xelement in g.Things
        Console.WriteLine(xelement.Name &": " & xelement.InnerXml)
     next
   End Sub
   

   Private Function CreateOverrideSerializer() As XmlSerializer 
      Dim myAnyElement As XmlAnyElementAttribute = _
      New XmlAnyElementAttribute()
      Dim xOverride As XmlAttributeOverrides = _
      New XmlAttributeOverrides()
      Dim xAtts As XmlAttributes = New XmlAttributes()
      xAtts.XmlAnyElements.Add(myAnyElement)
      xOverride.Add(GetType(Group), "Things", xAtts)
      return New XmlSerializer(GetType(Group) , xOverride)
   End Function
End Class

Megjegyzések

Ez XmlAnyElementAttribute alkalmazható olyan tagra, amely deszerializáláskor egy objektumtömböt XmlElement ad vissza. Ez lehetővé teszi, hogy deszerializálja azokat az XmlSerializer elemeket, amelyek nem rendelkeznek megfelelő tagokkal az objektumban, amelyek deszerializáltak – így ezek az elemek "ismeretlenek" a XmlSerializer. Ez akkor hasznos, ha az XML-adatfolyamot egy XML-webszolgáltatás módosította, vagy ha ismert, hogy a véletlenszerű adatok mindig szerepelnek az XML-adatfolyamban.

A XmlAnyElements tulajdonság lehetővé teszi, hogy felülbírálja egy tag szerializálását, hogy tagként működjön, amelyre a XmlAnyElementAttribute rendszer alkalmazva lett.

A következőre érvényes:

Lásd még