XmlSerializer Klasse

Definition

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

public ref class XmlSerializer
public class XmlSerializer
type XmlSerializer = class
Public Class XmlSerializer
Vererbung
XmlSerializer

Beispiele

Das folgende Beispiel enthält zwei Hauptklassen: PurchaseOrder und Test. Die PurchaseOrder Klasse enthält Informationen zu einem einzelnen Kauf. Die Test Klasse enthält die Methoden zum Erstellen der Bestellung und zum Lesen der erstellten Bestellung.

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 + "'");
   }
}
Imports System.Xml
Imports System.Xml.Serialization
Imports 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 ShipTo As Address
    Public OrderDate As String
    ' The XmlArrayAttribute changes the XML element name
    ' from the default of "OrderedItems" to "Items". 
    <XmlArrayAttribute("Items")> _
    Public OrderedItems() As OrderedItem
    Public SubTotal As Decimal
    Public ShipCost As Decimal
    Public TotalCost As Decimal
End Class


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 Name As String
    Public Line1 As String
    
    ' 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 City As String
    Public State As String
    Public Zip As String
End Class


Public Class OrderedItem
    Public ItemName As String
    Public Description As String
    Public UnitPrice As Decimal
    Public Quantity As Integer
    Public LineTotal As Decimal
    
    
    ' Calculate is a custom method that calculates the price per item,
    ' and stores the value in a field. 
    Public Sub Calculate()
        LineTotal = UnitPrice * Quantity
    End Sub
End Class


Public Class Test
    
   Public Shared Sub Main()
      ' Read and write purchase orders.
      Dim t As New Test()
      t.CreatePO("po.xml")
      t.ReadPO("po.xml")
   End Sub
    
   Private Sub CreatePO(filename As String)
      ' Create an instance of the XmlSerializer class;
      ' specify the type of object to serialize.
      Dim serializer As New XmlSerializer(GetType(PurchaseOrder))
      Dim writer As New StreamWriter(filename)
      Dim po As New PurchaseOrder()
        
      ' Create an address to ship and bill to.
      Dim billAddress As 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.
      Dim i1 As New OrderedItem()
      i1.ItemName = "Widget S"
      i1.Description = "Small widget"
      i1.UnitPrice = CDec(5.23)
      i1.Quantity = 3
      i1.Calculate()
        
      ' Insert the item into the array.
      Dim items(0) As OrderedItem
      items(0) = i1
      po.OrderedItems = items
      ' Calculate the total cost.
      Dim subTotal As New Decimal()
      Dim oi As OrderedItem
      For Each oi In  items
         subTotal += oi.LineTotal
      Next oi
      po.SubTotal = subTotal
      po.ShipCost = CDec(12.51)
      po.TotalCost = po.SubTotal + po.ShipCost
      ' Serialize the purchase order, and close the TextWriter.
      serializer.Serialize(writer, po)
      writer.Close()
   End Sub
    
   Protected Sub ReadPO(filename As String)
      ' Create an instance of the XmlSerializer class;
      ' specify the type of object to be deserialized.
      Dim serializer As New XmlSerializer(GetType(PurchaseOrder))
      ' If the XML document has been altered with unknown
      ' nodes or attributes, handle them with the
      ' UnknownNode and UnknownAttribute events.
      AddHandler serializer.UnknownNode, AddressOf serializer_UnknownNode
      AddHandler serializer.UnknownAttribute, AddressOf serializer_UnknownAttribute
      
      ' A FileStream is needed to read the XML document.
      Dim fs As New FileStream(filename, FileMode.Open)
      ' Declare an object variable of the type to be deserialized.
      Dim po As PurchaseOrder
      ' Use the Deserialize method to restore the object's state with
      ' data from the XML document. 
      po = CType(serializer.Deserialize(fs), PurchaseOrder)
      ' Read the order date.
      Console.WriteLine(("OrderDate: " & po.OrderDate))
        
      ' Read the shipping address.
      Dim shipTo As Address = po.ShipTo
      ReadAddress(shipTo, "Ship To:")
      ' Read the list of ordered items.
      Dim items As OrderedItem() = po.OrderedItems
      Console.WriteLine("Items to be shipped:")
      Dim oi As OrderedItem
      For Each oi In  items
         Console.WriteLine((ControlChars.Tab & oi.ItemName & ControlChars.Tab & _
         oi.Description & ControlChars.Tab & oi.UnitPrice & ControlChars.Tab & _
         oi.Quantity & ControlChars.Tab & oi.LineTotal))
      Next oi
      ' Read the subtotal, shipping cost, and total cost.
      Console.WriteLine(( New String(ControlChars.Tab, 5) & _
      " Subtotal"  & ControlChars.Tab & po.SubTotal))
      Console.WriteLine(New String(ControlChars.Tab, 5) & _
      " Shipping" & ControlChars.Tab & po.ShipCost )
      Console.WriteLine( New String(ControlChars.Tab, 5) & _
      " Total" &  New String(ControlChars.Tab, 2) & po.TotalCost)
    End Sub
    
    Protected Sub ReadAddress(a As Address, label As String)
      ' Read the fields of the Address object.
      Console.WriteLine(label)
      Console.WriteLine(ControlChars.Tab & a.Name)
      Console.WriteLine(ControlChars.Tab & a.Line1)
      Console.WriteLine(ControlChars.Tab & a.City)
      Console.WriteLine(ControlChars.Tab & a.State)
      Console.WriteLine(ControlChars.Tab & a.Zip)
      Console.WriteLine()
    End Sub
        
    Private Sub serializer_UnknownNode(sender As Object, e As XmlNodeEventArgs)
        Console.WriteLine(("Unknown Node:" & e.Name & ControlChars.Tab & e.Text))
    End Sub
    
    
    Private Sub serializer_UnknownAttribute(sender As Object, e As XmlAttributeEventArgs)
        Dim attr As System.Xml.XmlAttribute = e.Attr
        Console.WriteLine(("Unknown attribute " & attr.Name & "='" & attr.Value & "'"))
    End Sub
End Class

Hinweise

Weitere Informationen zu dieser API finden Sie in den ergänzenden API-Hinweisen für XmlSerializer.

Konstruktoren

Name Beschreibung
XmlSerializer()

Initialisiert eine neue Instanz der XmlSerializer-Klasse.

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 Objekt eines angegebenen Typs deserialisieren kann. Wenn eine Eigenschaft oder ein Feld ein Array zurückgibt, gibt der extraTypes Parameter Objekte an, die in das Array eingefügt werden können.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)
Veraltet.

Initialisiert eine neue Instanz der XmlSerializer Klasse, die Objekte des angegebenen Typs in XML-Dokumentinstanzen serialisieren und XML-Dokumentinstanzen in Objekte des angegebenen Typs deserialisieren kann. Mit dieser Überladung können Sie andere Typen bereitstellen, die während eines Serialisierungs- oder Deserialisierungsvorgangs auftreten können, sowie einen Standardnamespace für alle XML-Elemente, die Klasse, die als XML-Stammelement, deren Speicherort und Anmeldeinformationen verwendet werden soll, die für den Zugriff erforderlich sind.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String)

Initialisiert eine neue Instanz der XmlSerializer Klasse, die Objekte vom Typ Object in XML-Dokumentinstanzen serialisieren und XML-Dokumentinstanzen in Objekte des Typs Objectdeserialisieren kann. Jedes zu serialisierende Objekt kann selbst Instanzen von Klassen enthalten, die durch diese Überladung mit anderen Klassen überschrieben werden. Diese Überladung gibt auch den Standardnamespace für alle XML-Elemente und die Klasse an, die als XML-Stammelement verwendet werden soll.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String)

Initialisiert eine neue Instanz der XmlSerializer Klasse, die Objekte vom Typ Object in XML-Dokumentinstanzen serialisieren und XML-Dokumentinstanzen in Objekte des Typs Objectdeserialisieren kann. Jedes zu serialisierende Objekt kann selbst Instanzen von Klassen enthalten, die durch diese Überladung mit anderen Klassen überschrieben werden. Diese Überladung gibt auch den Standardnamespace für alle XML-Elemente und die Klasse an, die als XML-Stammelement verwendet werden soll.

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 diese Überladung mit anderen Klassen überschreiben kann.

XmlSerializer(Type, XmlRootAttribute)

Initialisiert eine neue Instanz der XmlSerializer Klasse, die Objekte des angegebenen Typs in XML-Dokumente serialisieren und ein XML-Dokument in Objekt des angegebenen Typs deserialisieren kann. Außerdem wird die Klasse angegeben, die als XML-Stammelement verwendet werden soll.

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(XmlTypeMapping)

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

Methoden

Name Beschreibung
CanDeserialize(XmlReader)

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

CreateReader()

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

CreateWriter()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Writer zurückgegeben, der zum Serialisieren des Objekts verwendet wird.

Deserialize(Stream)

Deserialisiert das XML-Dokument, das in dem angegebenen Dokument Streamenthalten ist.

Deserialize(TextReader)

Deserialisiert das XML-Dokument, das in dem angegebenen Dokument TextReaderenthalten ist.

Deserialize(XmlReader, String, XmlDeserializationEvents)

Deserialisiert das Objekt mithilfe der daten, die im angegebenen Objekt XmlReaderenthalten sind.

Deserialize(XmlReader, String)

Deserialisiert das XML-Dokument, das in der angegebenen XmlReader und Codierungsformatvorlage enthalten ist.

Deserialize(XmlReader, XmlDeserializationEvents)

Deserialisiert ein XML-Dokument, das in dem angegebenen XmlReader Dokument enthalten ist, und ermöglicht die Außerkraftsetzung von Ereignissen, die während der Deserialisierung auftreten.

Deserialize(XmlReader)

Deserialisiert das XML-Dokument, das in dem angegebenen Dokument XmlReaderenthalten ist.

Deserialize(XmlSerializationReader)

Deserialisiert das XML-Dokument, das in dem angegebenen Dokument XmlSerializationReaderenthalten ist.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
FromMappings(XmlMapping[], Evidence)
Veraltet.

Gibt eine Instanz der Klasse zurück, die XmlSerializer 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.

FromMappings(XmlMapping[])

Gibt ein Array von Objekten zurück, die XmlSerializer aus einem Array von XmlTypeMapping Objekten erstellt wurden.

FromTypes(Type[])

Gibt ein Array von Objekten zurück, die XmlSerializer aus einem Array von Typen erstellt wurden.

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

Gibt eine Assembly zurück, die benutzerdefinierte Serialisierer enthält, die zum Serialisieren oder Deserialisieren des angegebenen Typs oder Typs verwendet werden, mithilfe der angegebenen Zuordnungen und Compilereinstellungen und -optionen.

GenerateSerializer(Type[], XmlMapping[])

Gibt eine Assembly zurück, die benutzerdefinierte Serialisierer enthält, die zum Serialisieren oder Deserialisieren des angegebenen Typs oder Typs mithilfe der angegebenen Zuordnungen verwendet werden.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
GetXmlSerializerAssemblyName(Type, String)

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

GetXmlSerializerAssemblyName(Type)

Gibt den Namen der Assembly zurück, die mindestens eine Version der XmlSerializer speziell erstellten Assembly enthält, um den angegebenen Typ zu serialisieren oder deserialisieren.

MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
Serialize(Object, XmlSerializationWriter)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe des angegebenen XmlSerializationWriter.

Serialize(Stream, Object, XmlSerializerNamespaces)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe der angegebenen Stream Eigenschaft, die auf die angegebenen Namespaces verweist.

Serialize(Stream, Object)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe des angegebenen Stream.

Serialize(TextWriter, Object, XmlSerializerNamespaces)

Serialisiert das angegebene Dokument und schreibt das XML-Dokument mithilfe der angegebenen ObjectTextWriter Namespaces in eine Datei.

Serialize(TextWriter, Object)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe des angegebenen TextWriter.

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe der angegebenen XmlWriterXML-Namespaces und der Codierung in eine Datei.

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String)

Serialisiert das angegebene Objekt und schreibt das XML-Dokument mithilfe der angegebenen XmlWriter Namespaces und des Codierungsstils in eine Datei.

Serialize(XmlWriter, Object, XmlSerializerNamespaces)

Serialisiert das angegebene Dokument und schreibt das XML-Dokument mithilfe der angegebenen ObjectXmlWriter Namespaces in eine Datei.

Serialize(XmlWriter, Object)

Serialisiert das angegebene Object Dokument und schreibt das XML-Dokument mithilfe des angegebenen XmlWriter.

ToString()

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

(Geerbt von Object)

Ereignisse

Name Beschreibung
UnknownAttribute

Tritt auf, wenn beim XmlSerializer Deserialisieren ein XML-Attribut mit unbekanntem Typ auftritt.

UnknownElement

Tritt auf, wenn während der XmlSerializer Deserialisierung ein XML-Element mit unbekanntem Typ auftritt.

UnknownNode

Tritt auf, wenn während der XmlSerializer Deserialisierung ein XML-Knoten mit unbekanntem Typ auftritt.

UnreferencedObject

Tritt während der Deserialisierung eines SOAP-codierten XML-Datenstroms auf, wenn der erkannte Typ auftritt, der XmlSerializer nicht verwendet wird oder nicht referenziert wird.

Gilt für:

Threadsicherheit

Dieser Typ ist threadsicher.

Weitere Informationen