Dieser Artikel beschäftigt sich mit dem Export von Daten in XML aus .NET Objekte.
Zunächst habe ich ein paar Klassen angelegt:
- Customer: Stellt einen Kunden aus der Northwind-Datenbank dar.
- Address: Stellt eine Adresse dar, die in der Klasse Customer verwendet wird.
- Customers: Erbt von List<Customer> und stellt somit eine Auflistung von Kunden dar
Um Daten in XML serialisieren zu können, verwendet man die XmlSerializer-Klasse aus dem Namensraum System.Xml.Serialization.
Dazu habe ich der Klasse Customers eine Methode ExportToXml hinzugefügt:
public
string ExportToXml()
{
XmlSerializer xmls = new
XmlSerializer(typeof(Customers));
MemoryStream ms = new
MemoryStream();
xmls.Serialize(ms, this);
ms.Seek(0, 0);
StreamReader sr = new
StreamReader(ms);
string xml = sr.ReadToEnd();
sr.Close();
return xml;
}
Da die XmlSerializer-Klasse mit einem Stream arbeitet, müssen die Daten zunächst temporär in einem MemoryStream gespeichert werden. Der Vorteil dieser Stream-Klasse ist, dass die Daten nicht auf Dateisystem gespeichert werden, sondern wie der Name schon sagt, im Speicher zwischengespeichert wird. Danach lesen wir mit dem StreamReader die XML-Daten wieder in einen string und geben diese zurück.
Über Attribute kann das Mapping zu XML gesteuert werden. So wir standardmäßig die generische List-Klasse als "ArrayOfCustomer"-Element serialisiert. Wenn an der Stelle "Customers" stehen soll, muss in der Customers-Klasse ein Attribut angegeben werden:
[XmlRoot("Customers")]
public
class
Customers : List<Customer>
{
...
}
Alle Eigenschaften werden standardmäßig als XML-Element serialisiert. Mit Attributen kann dies genau gesteuert werden. Beispiel: CustomerId:
[XmlAttribute()]
public
string CustomerId
{
get { return customerId; }
set { customerId = value; }
}
Mit dem Attribut XmlIgnore() kann festgelegt werden, dass die Eigenschaft beim Serialisieren ignoriert werden soll.
Ergebnis:
Diese Methode ist einfach genial einfach für das Exportieren und Importieren von Daten. Des Weiteren wird natürlich hier im Vergleich zu "for xml" im SQL Server die Datenbank-Unabhängigkeit bewahrt.
Das komplette Beispiel kann unter http://downloads.hauserinfo.de/XmlSerializeDeserialize.zip heruntergeladen werden.
Thomas Hauser (http://thomashauser.spaces.live.com)