Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

XmlSerializer-Klasse

Serialisiert und deserialisiert Objekte in und aus XML-Dokumenten. Mit XmlSerializer können Sie steuern, wie Objekte in XML codiert werden.

System.Object
  System.Xml.Serialization.XmlSerializer

Namespace:  System.Xml.Serialization
Assembly:  System.Xml (in System.Xml.dll)
public class XmlSerializer

Der XmlSerializer-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer()Infrastruktur. Initialisiert eine neue Instanz der XmlSerializer-Klasse.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und XML-Dokumente in Objekte des angegebenen Typs deserialisieren kann.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekXmlSerializer(XmlTypeMapping)Initialisiert eine Instanz der XmlSerializer-Klasse mithilfe eines Objekts, das einen Typ einem anderen zuweist.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type, String)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und XML-Dokumente in Objekte des angegebenen Typs deserialisieren kann. Gibt den Standardnamespace für alle XML-Elemente an.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type, Type[])Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und XML-Dokumente in ein Objekt eines angegebenen Typs deserialisieren kann. Wenn eine Eigenschaft oder ein Feld ein Array zurückgibt, werden durch den extraTypes-Parameter die Objekte angegeben, die in das Array eingefügt werden können.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type, XmlAttributeOverrides)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und XML-Dokumente in Objekte des angegebenen Typs deserialisieren kann. Jedes zu serialisierende Objekt kann selbst Instanzen von Klassen enthalten, die von dieser Überladung durch andere Klassen überschrieben werden können.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type, XmlRootAttribute)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und ein XML-Dokument in ein Objekt des angegebenen Typs deserialisieren kann. Außerdem wird die als XML-Stammelement zu verwendende Klasse angegeben.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte vom Typ Object in Instanzen eines XML-Dokuments serialisieren und Instanzen eines XML-Dokuments in Objekte vom Typ Object deserialisieren kann. Jedes zu serialisierende Objekt kann selbst Instanzen von Klassen enthalten, die von dieser Überladung durch andere Klassen überschrieben werden können. Diese Überladung gibt außerdem den Standardnamespace für alle XML-Elemente sowie die als XML-Stammelement zu verwendende Klasse an.
Öffentliche MethodeXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String)Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte vom Typ Object in Instanzen eines XML-Dokuments serialisieren und Instanzen eines XML-Dokuments in Objekte vom Typ Object deserialisieren kann. Jedes zu serialisierende Objekt kann selbst Instanzen von Klassen enthalten, die von dieser Überladung durch andere Klassen überschrieben werden können. Diese Überladung gibt außerdem den Standardnamespace für alle XML-Elemente sowie die als XML-Stammelement zu verwendende Klasse an.
Öffentliche MethodeXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)Infrastruktur. Veraltet. Initialisiert eine neue Instanz der XmlSerializer-Klasse, die Objekte des angegebenen Typs in Instanzen von XML-Dokumenten serialisieren und Instanzen von XML-Dokumenten in Objekte des angegebenen Typs deserialisieren kann. Diese Überladung ermöglicht das Bereitstellen anderer Typen, die bei der Serialisierung oder Deserialisierung gefunden werden könnten, sowie eines Standardnamespaces für alle XML-Elemente, der Klasse, die als XML-Stammelement verwendet werden soll, ihres Speicherorts und der für den Zugriff erforderlichen Anmeldeinformationen.
Zum Seitenanfang
  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCanDeserializeRuft einen Wert ab, der angibt, ob dieser XmlSerializer ein angegebenes XML-Dokument deserialisieren kann.
Geschützte MethodeCreateReaderInfrastruktur. Gibt ein Objekt zurück, das zum Lesen des zu serialisierenden XML-Dokuments verwendet wird.
Geschützte MethodeCreateWriterInfrastruktur. Gibt beim Überschreiben in einer abgeleiteten Klasse einen Writer zurück, der zum Serialisieren des Objekts verwendet wird.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDeserialize(Stream)Deserialisiert das im angegebenen Stream enthaltene XML-Dokument.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDeserialize(TextReader)Deserialisiert das im angegebenen TextReader enthaltene XML-Dokument.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDeserialize(XmlReader)Deserialisiert das im angegebenen XmlReader enthaltene XML-Dokument.
Geschützte MethodeDeserialize(XmlSerializationReader)Infrastruktur. Deserialisiert das im angegebenen XmlSerializationReader enthaltene XML-Dokument.
Öffentliche MethodeUnterstützt von XNA FrameworkDeserialize(XmlReader, String)Deserialisiert das im angegebenen XmlReader enthaltene XML-Dokument anhand des angegebenen Codierungsstils.
Öffentliche MethodeDeserialize(XmlReader, XmlDeserializationEvents)Deserialisiert ein im XmlReader enthaltenes XML-Dokument und ermöglicht das Überschreiben der Ereignisse, die während der Deserialisierung eintreten.
Öffentliche MethodeDeserialize(XmlReader, String, XmlDeserializationEvents)Infrastruktur. Deserialisiert das Objekt mit den im angegebenen XmlReader enthaltenen Daten.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEquals(Object)Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekFromMappings(XmlMapping[])Infrastruktur. Gibt ein Array von XmlSerializer-Objekten zurück, das aus einem Array von XmlTypeMapping-Objekten erstellt wurde.
Öffentliche MethodeStatischer MemberFromMappings(XmlMapping[], Evidence) Veraltet. Gibt eine Instanz der XmlSerializer-Klasse zurück, die aus Zuordnungen eines XML-Typs zu einem anderen erstellt wurde.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekFromMappings(XmlMapping[], Type)Infrastruktur. Gibt eine Instanz der XmlSerializer-Klasse aus den angegebenen Zuordnungen zurück.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsFromTypesGibt ein Array von XmlSerializer-Objekten zurück, das aus einem Array von Typen erstellt wurde.
Öffentliche MethodeStatischer MemberGenerateSerializer(Type[], XmlMapping[])Infrastruktur. Gibt eine Assembly mit benutzerdefinierten Serialisierungsprogrammen zurück, die zum Serialisieren oder Deserialisieren des angegebenen Typs oder der angegebenen Typen unter Verwendung der angegebenen Zuordnungen verwendet werden.
Öffentliche MethodeStatischer MemberGenerateSerializer(Type[], XmlMapping[], CompilerParameters)Infrastruktur. Gibt eine Assembly mit benutzerdefinierten Serialisierungsprogrammen zurück, die zum Serialisieren oder Deserialisieren des angegebenen Typs oder der angegebenen Typen unter Verwendung der angegebenen Zuordnungen und der Compilereinstellungen und -optionen verwendet werden.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeFungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeStatischer MemberGetXmlSerializerAssemblyName(Type)Gibt den Namen der Assembly zurück, die eine oder mehrere Versionen des XmlSerializer enthält, die für das Serialisieren oder Deserialisieren des angegebenen Typs erstellt wurden.
Öffentliche MethodeStatischer MemberGetXmlSerializerAssemblyName(Type, String)Gibt den Namen der Assembly zurück, die das Serialisierungsprogramm für den angegebenen Typ im angegebenen Namespace enthält.
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Geschützte MethodeSerialize(Object, XmlSerializationWriter)Infrastruktur. Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen XmlSerializationWriter in eine Datei.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(Stream, Object)Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen Stream in eine Datei.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(TextWriter, Object)Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen TextWriter in eine Datei.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(XmlWriter, Object)Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen XmlWriter in eine Datei.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(Stream, Object, XmlSerializerNamespaces)Serialisiert das angegebene Object und schreibt das XML-Dokument unter Verwendung des angegebenen Stream in eine Datei, wobei auf die angegebenen Namespaces verwiesen wird.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(TextWriter, Object, XmlSerializerNamespaces)Serialisiert das angegebene Object und schreibt das XML-Dokument unter Verwendung des angegebenen TextWriter in eine Datei, wobei auf die angegebenen Namespaces verwiesen wird.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSerialize(XmlWriter, Object, XmlSerializerNamespaces)Serialisiert das angegebene Object und schreibt das XML-Dokument unter Verwendung des angegebenen XmlWriter in eine Datei, wobei auf die angegebenen Namespaces verwiesen wird.
Öffentliche MethodeUnterstützt von XNA FrameworkSerialize(XmlWriter, Object, XmlSerializerNamespaces, String)Serialisiert das angegebene Objekt und schreibt das XML-Dokument unter Verwendung des angegebenen XmlWriter in eine Datei, wobei auf die angegebenen Namespaces und den Codierungsstil verwiesen wird.
Öffentliche MethodeSerialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)Serialisiert das angegebene Object und schreibt das XML-Dokument unter Verwendung des angegebenen XmlWriter, des angegebenen XML-Namespaces und der angegebenen Codierung in eine Datei.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang
  NameBeschreibung
Öffentliches EreignisUnterstützt von XNA FrameworkUnknownAttributeTritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Attribut von unbekanntem Typ stößt.
Öffentliches EreignisUnterstützt von XNA FrameworkUnknownElementTritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Element von unbekanntem Typ stößt.
Öffentliches EreignisUnterstützt von XNA FrameworkUnknownNodeTritt ein, wenn XmlSerializer während der Deserialisierung auf einen XML-Knoten von unbekanntem Typ stößt.
Öffentliches EreignisUnterstützt von XNA FrameworkUnreferencedObjectTritt während der Deserialisierung eines SOAP-codierten XML-Streams ein, wenn XmlSerializer auf einen bekannten Typ stößt, der nicht verwendet wird oder auf den nicht verwiesen wird.
Zum Seitenanfang

Die XML-Serialisierung ist die Konvertierung der öffentlichen Eigenschaften und Felder eines Objekts in ein serielles Format (in diesem Fall XML) zum Zweck der Speicherung und Übermittlung. Die Deserialisierung erstellt das Objekt aus der XML-Ausgabe in seinem ursprünglichen Zustand erneut. Die Serialisierung kann daher als eine Möglichkeit zum Speichern des Zustands eines Objekts in einen Stream oder Puffer aufgefasst werden. Beispielsweise verwendet ASP.NET die XmlSerializer-Klasse zum Codieren von XML-Webdienstmeldungen.

Die Daten in den Objekten werden durch Konstrukte der Programmiersprache beschrieben, z. B. Klassen, Felder, Eigenschaften, primitive Typen, Arrays oder auch eingebettetes XML in Form von XmlElement-Objekten oder XmlAttribute-Objekten. Sie können eigene, mit Attributen versehene Klassen erstellen oder Klassen anhand eines vorhandenen XSD (XML Schema Definition)-Dokuments mit XML Schema Definition Tool (Xsd.exe) generieren. Wenn Sie über ein XML-Schema verfügen, können Sie die Xsd.exe ausführen und so eine Reihe von Klassen erstellen, die für dieses Schema streng typisiert und mit Attributen versehen sind, sodass sie nach der Serialisierung dem Schema entsprechen.

Für das Übertragen von Daten zwischen Objekten und XML ist eine Zuordnung der Konstrukte der Programmiersprache zum XML-Schema und vom XML-Schema zu den Konstrukten der Programmiersprache erforderlich. Der XmlSerializer und verwandte Tools wie Xsd.exe stellen sowohl zur Entwurfszeit als auch zur Laufzeit einen Übergang zwischen diesen beiden Technologien bereit. Zur Entwurfszeit können Sie mit der Xsd.exe aus den benutzerdefinierten Klassen ein XML-Schemadokument (.xsd) erstellen oder Klassen aus einem angegebenen Schema generieren. In beiden Fällen sind die Klassen mit benutzerdefinierten Attributen versehen, um XmlSerializer anzuweisen, wie die Zuordnung zwischen dem XML-Schemasystem und der Common Language Runtime vorzunehmen ist. Zur Laufzeit können Instanzen der Klassen in XML-Dokumente serialisiert werden, die dem angegebenen Schema entsprechen. Ebenso können diese XML-Dokumente wieder in Laufzeitobjekte deserialisiert werden. Beachten Sie, dass das XML-Schema optional ist und weder zur Entwurfszeit noch zur Laufzeit erforderlich ist.

Kontrollieren von generiertem XML-Code

Zum Steuern des generierten XML können Sie spezielle Attribute auf Klassen und Member anwenden. Um z. B. einen anderen XML-Elementnamen anzugeben, weisen Sie XmlElementAttribute einem öffentlichen Feld oder einer Eigenschaft zu und legen die ElementName-Eigenschaft fest. Eine vollständige Liste ähnlicher Attribute finden Sie unter Attributes That Control XML Serialization. Sie können auch die IXmlSerializable-Schnittstelle implementieren, um die XML-Ausgabe zu kontrollieren.

Wenn das generierte XML Abschnitt 5 des Dokuments "Simple Object Access Protocol (SOAP) 1.1" des World Wide Web Consortium (www.w3.org) entspricht, müssen Sie den XmlSerializer mit XmlTypeMapping erstellen. Um das codierte SOAP-XML weiter zu steuern, verwenden Sie die in Attributes That Control Encoded SOAP Serialization aufgeführten Attribute.

Mit XmlSerializer können Sie die Vorteile der Arbeit mit stark typisierten Klassen nutzen, ohne auf die Flexibilität von XML verzichten zu müssen. Wenn Sie in den stark typisierten Klassen Felder oder Eigenschaften vom Typ XmlElement, XmlAttribute oder XmlNode verwenden, können Sie Teile des XML-Dokuments direkt in XML-Objekte einlesen.

Wenn Sie mit umfangreichen XML-Schemas arbeiten, können Sie auch mit den Attributen XmlAnyElementAttribute und XmlAnyAttributeAttribute Elemente oder Attribute serialisieren bzw. deserialisieren, die nicht im ursprünglichen Schema gefunden wurden. Zum Verwenden des Objekts wenden Sie XmlAnyElementAttribute auf ein Feld an, das ein Array von XmlElement-Objekten zurückgibt, oder wenden Sie XmlAnyAttributeAttribute auf ein Feld an, das ein Array von XmlAttribute-Objekten zurückgibt.

Wenn eine Eigenschaft oder ein Feld ein komplexes Objekt zurückgibt (z. B. ein Array oder eine Klasseninstanz), wird dieses von XmlSerializer in ein Element konvertiert, das innerhalb des XML-Hauptdokuments geschachtelt ist. Die erste Klasse im folgenden Code gibt beispielsweise eine Instanz der zweiten Klasse zurück.

public class MyClass
{
    public MyObject MyObjectProperty;
}
public class MyObject
{
    public string ObjectName;
}

Die serialisierte XML-Ausgabe lautet wie folgt:

<MyClass>
  <MyObjectProperty>
  <ObjectName>My String</ObjectName>
  </MyObjectProperty>
</MyClass>

Wenn ein Schema ein optionales Element (minOccurs = '0') oder einen Standardwert enthält, stehen zwei Optionen zur Verfügung. Die eine Option ist es, mit System.ComponentModel.DefaultValueAttribute den Standardwert anzugeben, wie im folgenden Code dargestellt.

public class PurchaseOrder
{
    [System.ComponentModel.DefaultValueAttribute ("2002")]
    public string Year;
}

Eine weitere Option ist es, mithilfe eines speziellen Musters ein boolesches Feld zu erstellen, das vom XmlSerializer erkannt wird, und XmlIgnoreAttribute auf dieses Feld anzuwenden. Das Muster wird im Format propertyNameSpecified erstellt. Wenn beispielsweise ein Feld "MyFirstName" vorhanden ist, würden Sie außerdem ein Feld "MyFirstNameSpecified" erstellen, das den XmlSerializer anweist, ein XML-Element mit der Bezeichnung "MyFirstName" zu generieren bzw. nicht zu generieren. Dies wird im folgenden Beispiel gezeigt.

public class OptionalOrder
{
    // This field should not be serialized 
    // if it is uninitialized.
    public string FirstOrder;

    // Use the XmlIgnoreAttribute to ignore the 
    // special field named "FirstOrderSpecified".
    [System.Xml.Serialization.XmlIgnoreAttribute]
    public bool FirstOrderSpecified;
}

Überschreiben der Standardserialisierung

Sie können die Serialisierung einer beliebigen Gruppe von Objekten und der zugehörigen Felder und Eigenschaften überschreiben, indem Sie eines der entsprechenden Attribute erstellen und dieses einer Instanz der XmlAttributes-Klasse hinzufügen. Die Serialisierung auf diese Weise zu überschreiben, bietet zweierlei Nutzen: Erstens können Sie die Serialisierung von Objekten in einer DLL steuern und erweitern, auch wenn Sie nicht auf den Quellcode zugreifen können. Zweitens können Sie eine einzige Gruppe von serialisierbaren Klassen erstellen, deren Objekte jedoch auf verschiedene Art serialisiert werden können. Weitere Informationen finden Sie unter der XmlAttributeOverrides-Klasse und unter How to: Control Serialization of Derived Classes.

Rufen Sie die Serialize-Methode auf, um ein Objekt zu serialisieren. Rufen Sie die Deserialize-Methode auf, um ein Objekt zu deserialisieren.

Informationen über das Hinzufügen von XML-Namespaces zu einem XML-Dokument finden Sie unter XmlSerializerNamespaces.

HinweisHinweis

Klassen, die IEnumerable oder ICollection implementieren, werden von XmlSerializer besonders behandelt. Eine Klasse, die IEnumerable implementiert, muss eine öffentliche Add-Methode mit einem einzigen Parameter implementieren. Der Parameter der Add-Methode muss von demselben Typ sein, den die Current-Eigenschaft für den von GetEnumerator zurückgegebenen Wert zurückgibt, oder muss ein Basistyp dieses Typs sein. Eine Klasse, die ICollection zusätzlich zu IEnumerable implementiert, z. B. CollectionBase, muss eine öffentliche und mit Item indizierte (Indexer in C#) Eigenschaft mit einer ganzen Zahl sowie eine öffentliche Count-Eigenschaft vom Typ Integer aufweisen. Der Parameter der Add-Methode muss von demselben Typ sein, den die Item-Eigenschaft zurückgibt, oder muss ein Basistyp dieses Typs sein. Bei Klassen, die ICollection implementieren, werden die zu serialisierenden Werte nicht durch einen Aufruf von GetEnumerator, sondern über die indizierte Item-Eigenschaft abgerufen.

Sie müssen über die Berechtigung zum Schreiben im temporären Verzeichnis (das durch die Umgebungsvariable TEMP definiert wird) verfügen, um ein Objekt deserialisieren zu können.

Dynamisch generierte Assemblys

Zum Verbessern der Leistung generiert die XML-Serialisierungsinfrastruktur dynamisch Assemblys für das Serialisieren und Deserialisieren der angegebenen Typen. Die Infrastruktur sucht diese Assemblys und verwendet sie wieder. Dieses Verhalten tritt nur bei der Verwendung der folgenden Konstruktoren auf:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

Wenn Sie einen anderen Konstruktor verwenden, werden mehrere Versionen derselben Assembly generiert und niemals entladen, was zu Speicherverlusten und einer eingeschränkten Leistung führen kann. Die einfachste Lösung ist es, einen der beiden genannten Konstruktoren zu verwenden. Andernfalls müssen Sie die Assemblys in einer Hashtable zwischenspeichern, wie im folgenden Beispiel dargestellt.

Hashtable serializers = new Hashtable();

// Use the constructor that takes a type and XmlRootAttribute.
XmlSerializer s = new XmlSerializer(typeof(MyClass), myRoot);

// Implement a method named GenerateKey that creates unique keys 
// for each instance of the XmlSerializer. The code should take 
// into account all parameters passed to the XmlSerializer 
// constructor.
object key = GenerateKey(typeof(MyClass), myRoot);

// Check the local cache for a matching serializer.
XmlSerializer ser = (XmlSerializer)serializers[key];
if (ser == null) 
{
    ser = new XmlSerializer(typeof(MyClass), myRoot);
    // Cache the serializer.
    serializers[key] = ser;
}
else
{
    // Use the serializer to serialize, or deserialize.
}

Serialisierung von ArrayList und generischer Liste

Der XmlSerializer kann die folgenden Elemente weder serialisieren noch deserialisieren:

Serialisierung von Enumerationen mit langen Ganzzahlen ohne Vorzeichen

Es kann keine Instanz von XmlSerializer zum Serialisieren einer Enumeration erstellt werden, wenn folgende Bedingungen zutreffen: Die Enumeration ist vom Typ unsigned long (ulong in C#), und die Enumeration enthält einen Member, dessen Wert größer ist als 9.223.372.036.854.775.807. Das folgende Beispiel erfüllt diese Bedingungen und kann nicht serialisiert werden.

public enum LargeNumbers: ulong
{
    a = 9223372036854775808
}
// At runtime, the following code will fail.
xmlSerializer mySerializer=new XmlSerializer(typeof(LargeNumbers));

Keine Serialisierung von Objekten mit dem Obsolete-Attribut

Die XmlSerializer-Klasse in serialisiert keine Objekte mehr, die mit [Obsolete] gekennzeichnet sind.

Das folgende Beispiel enthält zwei Hauptklassen: PurchaseOrder und Test. Die PurchaseOrder-Klasse enthält Informationen über eine einzelne Bestellung. Die Test-Klasse enthält die Methoden, mit denen der Bestellauftrag erstellt und ein erstellter Bestellauftrag gelesen wird.


using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

/* The XmlRootAttribute allows you to set an alternate name 
   (PurchaseOrder) of the XML element, the element namespace; by 
   default, the XmlSerializer uses the class name. The attribute 
   also allows you to set the XML namespace for the element.  Lastly,
   the attribute sets the IsNullable property, which specifies whether 
   the xsi:null attribute appears if the class instance is set to 
   a null reference. */
[XmlRootAttribute("PurchaseOrder", Namespace="http://www.cpandl.com", 
IsNullable = false)]
public class PurchaseOrder
{
   public Address ShipTo;
   public string OrderDate; 
   /* The XmlArrayAttribute changes the XML element name
    from the default of "OrderedItems" to "Items". */
   [XmlArrayAttribute("Items")]
   public OrderedItem[] OrderedItems;
   public decimal SubTotal;
   public decimal ShipCost;
   public decimal TotalCost;   
}

public class Address
{
   /* The XmlAttribute instructs the XmlSerializer to serialize the Name
      field as an XML attribute instead of an XML element (the default
      behavior). */
   [XmlAttribute]
   public string Name;
   public string Line1;

   /* Setting the IsNullable property to false instructs the 
      XmlSerializer that the XML attribute will not appear if 
      the City field is set to a null reference. */
   [XmlElementAttribute(IsNullable = false)]
   public string City;
   public string State;
   public string Zip;
}

public class OrderedItem
{
   public string ItemName;
   public string Description;
   public decimal UnitPrice;
   public int Quantity;
   public decimal LineTotal;

   /* Calculate is a custom method that calculates the price per item,
      and stores the value in a field. */
   public void Calculate()
   {
      LineTotal = UnitPrice * Quantity;
   }
}

public class Test
{
   public static void Main()
   {
      // Read and write purchase orders.
      Test t = new Test();
      t.CreatePO("po.xml");
      t.ReadPO("po.xml");
   }

   private void CreatePO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to serialize.
      XmlSerializer serializer = 
      new XmlSerializer(typeof(PurchaseOrder));
      TextWriter writer = new StreamWriter(filename);
      PurchaseOrder po=new PurchaseOrder();

      // Create an address to ship and bill to.
      Address billAddress = new Address();
      billAddress.Name = "Teresa Atkinson";
      billAddress.Line1 = "1 Main St.";
      billAddress.City = "AnyTown";
      billAddress.State = "WA";
      billAddress.Zip = "00000";
      // Set ShipTo and BillTo to the same addressee.
      po.ShipTo = billAddress;
      po.OrderDate = System.DateTime.Now.ToLongDateString();

      // Create an OrderedItem object.
      OrderedItem i1 = new OrderedItem();
      i1.ItemName = "Widget S";
      i1.Description = "Small widget";
      i1.UnitPrice = (decimal) 5.23;
      i1.Quantity = 3;
      i1.Calculate();

      // Insert the item into the array.
      OrderedItem [] items = {i1};
      po.OrderedItems = items;
      // Calculate the total cost.
      decimal subTotal = new decimal();
      foreach(OrderedItem oi in items)
      {
         subTotal += oi.LineTotal;
      }
      po.SubTotal = subTotal;
      po.ShipCost = (decimal) 12.51; 
      po.TotalCost = po.SubTotal + po.ShipCost; 
      // Serialize the purchase order, and close the TextWriter.
      serializer.Serialize(writer, po);
      writer.Close();
   }

   protected void ReadPO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to be deserialized.
      XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
      /* If the XML document has been altered with unknown 
      nodes or attributes, handle them with the 
      UnknownNode and UnknownAttribute events.*/
      serializer.UnknownNode+= new 
      XmlNodeEventHandler(serializer_UnknownNode);
      serializer.UnknownAttribute+= new 
      XmlAttributeEventHandler(serializer_UnknownAttribute);

      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
      // Declare an object variable of the type to be deserialized.
      PurchaseOrder po;
      /* Use the Deserialize method to restore the object's state with
      data from the XML document. */
      po = (PurchaseOrder) serializer.Deserialize(fs);
      // Read the order date.
      Console.WriteLine ("OrderDate: " + po.OrderDate);

      // Read the shipping address.
      Address shipTo = po.ShipTo;
      ReadAddress(shipTo, "Ship To:");
      // Read the list of ordered items.
      OrderedItem [] items = po.OrderedItems;
      Console.WriteLine("Items to be shipped:");
      foreach(OrderedItem oi in items)
      {
         Console.WriteLine("\t"+
         oi.ItemName + "\t" + 
         oi.Description + "\t" +
         oi.UnitPrice + "\t" +
         oi.Quantity + "\t" +
         oi.LineTotal);
      }
      // Read the subtotal, shipping cost, and total cost.
      Console.WriteLine("\t\t\t\t\t Subtotal\t" + po.SubTotal);
      Console.WriteLine("\t\t\t\t\t Shipping\t" + po.ShipCost); 
      Console.WriteLine("\t\t\t\t\t Total\t\t" + po.TotalCost);
   }

   protected void ReadAddress(Address a, string label)
   {
      // Read the fields of the Address object.
      Console.WriteLine(label);
      Console.WriteLine("\t"+ a.Name );
      Console.WriteLine("\t" + a.Line1);
      Console.WriteLine("\t" + a.City);
      Console.WriteLine("\t" + a.State);
      Console.WriteLine("\t" + a.Zip );
      Console.WriteLine();
   }

   private void serializer_UnknownNode
   (object sender, XmlNodeEventArgs e)
   {
      Console.WriteLine("Unknown Node:" +   e.Name + "\t" + e.Text);
   }

   private void serializer_UnknownAttribute
   (object sender, XmlAttributeEventArgs e)
   {
      System.Xml.XmlAttribute attr = e.Attr;
      Console.WriteLine("Unknown attribute " + 
      attr.Name + "='" + attr.Value + "'");
   }
}


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

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

Dieser Typ ist threadsicher.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.