C#: XML-Serialisierung mit dem XmlSerializer Teil 1

Mit dem XmlSerializer können auf einfache Weise XML-Dokumente erstellt werden. Zum Beispiel wollen wir eine XML-Datei mit Adressdaten generieren, die folgendermassen aussehen soll:




    Musterstrasse
    77a
    In einem Land
    1234
    Musterhausen
    Max
    Mustermann

Dazu erstellen wir zuerst einmal eine einfache Adressklasse, in der die Adressdaten gespeichert werden können:


namespace XML_Serialisierung
{
    public class Address
    {
        public int AddressNumber { get; set; }        
        public string Street { get; set; }
        public string HouseNumber { get; set; }
        public string Country { get; set; }
        public string ZIP { get; set; }
        public string City { get; set; }
    }
}

Würden man diese Klasse jetzt serialisieren, hätten die XML-Tags nicht die gewünschten Namen. Der XmlSerializer würde die Namen der Properties verwenden.

Mit Hilfe von Attributen kann man die Ausgabe der XML-Datei steuern. Im obigen XML ist die Adressnummer ein Attribut des Wurzelelment Adresse. Um dies zu erreichen, wird das Attribut [XmlAttribute] verwendet. Das Attribut [XmlElement(„“)] wird verwendet um den Namen des XML-Tag festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    public class Address
    {
        [XmlAttribute("Adressenummer")]
        public int AddressNumber { get; set; }
        
        [XmlElement("Strasse")]
        public string Street { get; set; }

        [XmlElement("Hausnumer")]
        public string HouseNumber { get; set; }

        [XmlElement("Land")]
        public string Country { get; set; }

        [XmlElement("Postleitzahl")]
        public string ZIP { get; set; }

        [XmlElement("Stadt")]
        public string City { get; set; }
    }
}

In unserer Adressklasse fehlen uns aber noch ein paar Angaben wie Name, Vorname, Firmenname.. usw. Dazu werden wir 2 neue Klassen erstellen. Eine Klasse für Firmenadressen (B2B) und Privatadressen (B2C).


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2C: Address
    {
        [XmlElement("Vorname")]
        public string Firstname { get; set; }

        [XmlElement("Nachname")]
        public string Lastname { get; set; }
    }
}

Das Attribut [XmlRoot(„“)] wird verwendet um den Namen des Wurzelelements (Rootelement) festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2B:Address
    {
        [XmlElement("Firmenname")]
        public string CompanyName { get; set; }

        [XmlElement("Abteilung")]
        public string Division { get; set; }

        [XmlElement("Kontaktperson")]
        public string ContactPerson { get; set; }
    }
}

Klasse mit dem XmlSerializer serialisieren

Das serialisieren der erstellten Adressklassen kann nun mit sehr wenig Code-Zeilen erledigt werden.
Dazu wird zuerst das gewünschte Objekt AddressB2B oder AddressB2C erstellt und dann die Werte zugewiesen. Damit der XmlSerializer den Typ der zu serialsierenden Klasse kennt, muss dieser beim Instanziieren des XmlSerializer mitgegeben werden.


/*********************************************************/
//example 1
/*********************************************************/
/*b2c addresse*/
AddressB2C addressB2C = new AddressB2C();
addressB2C.AddressNumber = 123456789;
addressB2C.Firstname    = "Max";
addressB2C.Lastname     = "Mustermann";
addressB2C.Address1     = "Musterstrasse";
addressB2C.HouseNumber  = "77a";
addressB2C.City         = "Musterhausen";
addressB2C.ZIP          = "1234";
addressB2C.Country      = "In einem Land";

/*Create a XmlSerializer from type AddressB2C*/
XmlSerializer xmls = new XmlSerializer(typeof(AddressB2C));
StreamWriter mwriter = new StreamWriter("b2cAddress.xml");
xmls.Serialize(mwriter, addressB2C);
mwriter.Close();

Als Ergebnis erhalten wir in der Datei „b2cAddress.xml“ die gewünschte XML-Struktur.

Nützliche Links:

msdn: xml.serialization
C#: XML-Serialisierung mit dem XmlSerializer Teil 2