Freigeben über


XmlAttributes.XmlAnyElements-Eigenschaft

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

Namespace: System.Xml.Serialization
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
Public ReadOnly Property XmlAnyElements As XmlAnyElementAttributes
'Usage
Dim instance As XmlAttributes
Dim value As XmlAnyElementAttributes

value = instance.XmlAnyElements
public XmlAnyElementAttributes XmlAnyElements { get; }
public:
property XmlAnyElementAttributes^ XmlAnyElements {
    XmlAnyElementAttributes^ get ();
}
/** @property */
public XmlAnyElementAttributes get_XmlAnyElements ()
public function get XmlAnyElements () : XmlAnyElementAttributes

Eigenschaftenwert

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

Hinweise

Das XmlAnyElementAttribute kann einem Member zugewiesen werden, der bei der Deserialisierung ein Array von XmlElement-Objekten zurückgibt. Dadurch kann der XmlSerializer alle Elemente deserialisieren, die keinen entsprechenden Member im deserialisierten Objekt besitzen. Somit sind diese Elemente dem XmlSerializer unbekannt. Dies ist nützlich, wenn der XML-Stream von einem XML-Webdienst geändert wurde oder wenn bekannt ist, dass der XML-Stream immer Zufallsdaten enthalten wird.

Mit der XmlAnyElements-Eigenschaft haben Sie die Möglichkeit, die Serialisierung eines Members zu überschreiben, sodass er als Member fungiert, dem XmlAnyElementAttribute zugewiesen wurde.

Beispiel

Im folgenden Beispiel wird ein neues XmlAnyElementAttribute-Objekt erstellt und der Auflistung von Objekten hinzugefügt, auf die über die XmlAnyElements-Eigenschaft zugegriffen werden kann. Das XmlAttributes-Objekt wird dann einem XmlAttributeOverrides-Objekt hinzugefügt, mit dem ein XmlSerializer-Objekt erstellt wird. Der XmlSerializer wird zum Serialisieren bzw. zum Deserialisieren eines Objekts verwendet. Um die Auswirkungen der Verwendung der XmlAnyElementAttributes-Eigenschaft anzeigen zu lassen, erstellen Sie durch Ausführen der SerializeObject-Methode in der Main-Methode ein XML-Dokument mit dem Namen "UnknownElements.xml". Bearbeiten Sie das erhaltene Dokument, um weitere (unbekannte) Elemente aufnehmen zu können. Kommentieren Sie den SerializeObject-Aufruf in der Main-Methode aus, und heben Sie die Auskommentierung des Aufrufs der DeserializeObject-Methode auf, mit der der Name und der Wert aller unbekannten XML-Elemente ausgegeben wird.

Imports System
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
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);
   }
}
#using <System.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;
using namespace System::Xml;
public ref class Group
{
public:
   String^ GroupName;

   [XmlAnyElement]
   array<Object^>^Things;
};

void SerializeObject( String^ filename );
void DeserializeObject( String^ filename );
XmlSerializer^ CreateOverrideSerializer();
int main()
{
   // 1 Run this and create the XML document.
   // 2 Add new elements to the XML document.
   // 3 Comment out the next line, and uncomment
   // the DeserializeObject line to deserialize the
   // XML document and see unknown elements.
   SerializeObject( "UnknownElements.xml" );

   // DeserializeObject(S"UnknownElements.xml");
}

void SerializeObject( String^ filename )
{
   XmlSerializer^ ser = gcnew XmlSerializer( Group::typeid );
   TextWriter^ writer = gcnew StreamWriter( filename );
   Group^ g = gcnew Group;
   g->GroupName = "MyGroup";
   ser->Serialize( writer, g );
   writer->Close();
}

void DeserializeObject( String^ filename )
{
   XmlSerializer^ ser = CreateOverrideSerializer();

   // A FileStream is needed to read the XML document.
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   Group^ g = safe_cast<Group^>(ser->Deserialize( fs ));
   fs->Close();
   Console::WriteLine( g->GroupName );
   Console::WriteLine( g->Things->Length );
   for ( int i = 0; i < g->Things->Length; ++i )
   {
      XmlElement^ xelement = safe_cast<XmlElement^>(g->Things[ i ]);
      Console::WriteLine( "{0}: {1}", xelement->Name, xelement->InnerXml );
   }
}

XmlSerializer^ CreateOverrideSerializer()
{
   XmlAnyElementAttribute^ myAnyElement = gcnew XmlAnyElementAttribute;
   XmlAttributeOverrides^ xOverride = gcnew XmlAttributeOverrides;
   XmlAttributes^ xAtts = gcnew XmlAttributes;
   xAtts->XmlAnyElements->Add( myAnyElement );
   xOverride->Add( Group::typeid, "Things", xAtts );
   return gcnew XmlSerializer( Group::typeid,xOverride );
}
import System.*;
import System.IO.*;
import System.Xml.Serialization.*;
import System.Xml.*;
public class Group
{
    public String groupName;

    /** @attribute XmlAnyElement()
     */
    public Object things[];
} //Group

public class Test
{
    public static void main(String[] args)
    {
        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");
    } //main

    // t.DeserializeObject("UnknownElements.xml");
    private void SerializeObject(String fileName)
    {
        XmlSerializer ser = new XmlSerializer(Group.class.ToType());
        TextWriter writer = new StreamWriter(fileName);
        Group g = new Group();
        g.groupName = "MyGroup";
        ser.Serialize(writer, g);
        writer.Close();
    } //SerializeObject

    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.get_Length());
        for (int iCtr = 0; iCtr < g.things.get_Count(); iCtr++) {
            XmlElement xElement = (XmlElement)g.things[iCtr];
            Console.WriteLine(xElement.get_Name() + ": " 
                + xElement.get_InnerXml());
        }
    } //DeserializeObject

    private XmlSerializer CreateOverrideSerializer()
    {
        XmlAnyElementAttribute myAnyElement = new XmlAnyElementAttribute();
        XmlAttributeOverrides xOverride = new XmlAttributeOverrides();
        XmlAttributes xAtts = new XmlAttributes();
        xAtts.get_XmlAnyElements().Add(myAnyElement);
        xOverride.Add(Group.class.ToType(), "things", xAtts);
        return new XmlSerializer(Group.class.ToType(), xOverride);
    } //CreateOverrideSerializer
} //Test

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

XmlAttributes-Klasse
XmlAttributes-Member
System.Xml.Serialization-Namespace
XmlAttributes.XmlAnyAttribute-Eigenschaft