XmlAttributes.XmlAnyElements Tulajdonság
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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.