XmlSerializer Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 |
| 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
- XmlAttributeOverrides
- XmlAttributes
- XmlText
- Einführung in die XML-Serialisierung
- Vorgehensweise: Angeben eines alternativen Elementnamens für einen XML-Stream
- Steuern der XML-Serialisierung mithilfe von Attributen
- Beispiele für die XML-Serialisierung
- XML Schema Definition-Tool (Xsd.exe)
- Gewusst wie: Steuern der Serialisierung abgeleiteter Klassen
- <dateTimeSerialization-Element>
- <xmlSerializer-Element>