Auf Englisch lesen

Freigeben über


XmlSerializer Klasse

Definition

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

C#
public class XmlSerializer
Vererbung
XmlSerializer

Beispiele

Das folgende Beispiel enthält zwei Standard Klassen: PurchaseOrder und Test. Die PurchaseOrder -Klasse enthält Informationen zu einem einzelnen Kauf. Die Test -Klasse enthält die Methoden, die die Bestellung erstellen und die die erstellte Bestellung lesen.

C#
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 + "'");
   }
}

Hinweise

Weitere Informationen zu dieser API finden Sie unter Ergänzende API-Hinweise für XmlSerializer.

Konstruktoren

XmlSerializer()

Initialisiert eine neue Instanz der XmlSerializer-Klasse.

XmlSerializer(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.

XmlSerializer(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.

XmlSerializer(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.

XmlSerializer(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.

XmlSerializer(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.

XmlSerializer(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.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)
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.

XmlSerializer(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.

XmlSerializer(XmlTypeMapping)

Initialisiert eine Instanz der XmlSerializer-Klasse mithilfe eines Objekts, das einen Typ einem anderen zuweist.

Methoden

CanDeserialize(XmlReader)

Ruft einen Wert ab, der angibt, ob dieser XmlSerializer ein angegebenes XML-Dokument deserialisieren kann.

CreateReader()

Gibt ein Objekt zurück, das zum Lesen des zu serialisierenden XML-Dokuments verwendet wird.

CreateWriter()

Gibt beim Überschreiben in einer abgeleiteten Klasse einen Writer zurück, der zum Serialisieren des Objekts verwendet wird.

Deserialize(Stream)

Deserialisiert das im angegebenen Stream enthaltene XML-Dokument.

Deserialize(TextReader)

Deserialisiert das im angegebenen TextReader enthaltene XML-Dokument.

Deserialize(XmlReader)

Deserialisiert das im angegebenen XmlReader enthaltene XML-Dokument.

Deserialize(XmlReader, String)

Deserialisiert das im angegebenen XmlReader enthaltene XML-Dokument anhand des angegebenen Codierungsstils.

Deserialize(XmlReader, String, XmlDeserializationEvents)

Deserialisiert das Objekt mit den im angegebenen XmlReader enthaltenen Daten.

Deserialize(XmlReader, XmlDeserializationEvents)

Deserialisiert ein im XmlReader enthaltenes XML-Dokument und ermöglicht das Überschreiben der Ereignisse, die während der Deserialisierung eintreten.

Deserialize(XmlSerializationReader)

Deserialisiert das im angegebenen XmlSerializationReader enthaltene XML-Dokument.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
FromMappings(XmlMapping[])

Gibt ein Array von XmlSerializer-Objekten zurück, das aus einem Array von XmlTypeMapping-Objekten erstellt wurde.

FromMappings(XmlMapping[], Evidence)
Veraltet.

Gibt eine Instanz der XmlSerializer-Klasse zurück, die aus Zuordnungen eines XML-Typs zu einem anderen erstellt wurde.

FromMappings(XmlMapping[], Type)

Gibt eine Instanz der XmlSerializer-Klasse aus den angegebenen Zuordnungen zurück.

FromTypes(Type[])

Gibt ein Array von XmlSerializer-Objekten zurück, das aus einem Array von Typen erstellt wurde.

GenerateSerializer(Type[], XmlMapping[])

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.

GenerateSerializer(Type[], XmlMapping[], CompilerParameters)

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.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetXmlSerializerAssemblyName(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.

GetXmlSerializerAssemblyName(Type, String)

Gibt den Namen der Assembly zurück, die das Serialisierungsprogramm für den angegebenen Typ im angegebenen Namespace enthält.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Serialize(Object, XmlSerializationWriter)

Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen XmlSerializationWriter in eine Datei.

Serialize(Stream, Object)

Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen Stream in eine Datei.

Serialize(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.

Serialize(TextWriter, Object)

Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen TextWriter in eine Datei.

Serialize(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.

Serialize(XmlWriter, Object)

Serialisiert das angegebene Object und schreibt das XML-Dokument über den angegebenen XmlWriter in eine Datei.

Serialize(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.

Serialize(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.

Serialize(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.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Ereignisse

UnknownAttribute

Tritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Attribut von unbekanntem Typ stößt.

UnknownElement

Tritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Element von unbekanntem Typ stößt.

UnknownNode

Tritt ein, wenn XmlSerializer während der Deserialisierung auf einen XML-Knoten von unbekanntem Typ stößt.

UnreferencedObject

Tritt 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.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Threadsicherheit

Dieser Typ ist threadsicher.

Weitere Informationen