XmlAttributes.XmlAnyElements 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
재정의할 개체의 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
속성 값
XmlAnyElementAttributes 개체 컬렉션을 XmlAnyElementAttribute 나타내는 개체입니다.
예제
다음 예제에서는 새 XmlAnyElementAttribute 개체를 만들고 속성을 통해 액세스 하는 개체의 컬렉션에 XmlAnyElements 추가 합니다.
XmlAttributes 그런 다음 개체를 XmlAttributeOverrides 만드는 데 사용되는 개체에 개체를 추가합니다XmlSerializer. 개체 XmlSerializer 를 직렬화하거나 역직렬화하는 데 사용됩니다. 속성 사용 XmlAnyElementAttributes 의 효과를 보려면 메서드에서 메서드 Main 를 실행 SerializeObject 하여 "UnknownElements.xml"라는 XML 문서를 만듭니다. 결과 문서를 편집하여 다른(알 수 없는) 요소를 포함합니다. 메서드에서 호출을 SerializeObjectMain 주석 처리하고 알 수 없는 XML 요소의 이름과 값을 출력하는 메서드 호출의 주석 DeserializeObject 처리를 제거합니다.
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
설명
역 XmlAnyElementAttribute 직렬화 시 개체 배열 XmlElement 을 반환하는 멤버에 적용할 수 있습니다. 이렇게 하면 역직렬화되는 개체에 해당 멤버가 없는 요소를 역직렬화할 수 XmlSerializer 있으므로 해당 요소는 "알 수 없음" XmlSerializer입니다. XML 웹 서비스에서 XML 스트림을 변경하거나 임의의 데이터가 항상 XML 스트림에 포함된 것으로 알려진 경우에 유용합니다.
이 XmlAnyElements 속성을 사용하면 적용된 멤버로 작동하도록 멤버의 serialization을 재정의 XmlAnyElementAttribute 할 수 있습니다.