다음을 통해 공유


XmlAttributes.XmlAnyElements 속성

정의

재정의할 개체의 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 할 수 있습니다.

적용 대상

추가 정보