DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  SharePoint Camp – In 5 Tagen zum SharePoint Profi!

 
Navigationslinks überspringen
Autor:Thomas Hauser

XML Export

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)


Diskutieren Sie in den Foren

DevTrain Camp – Schneller zum .NET 4.0 Developer!