Zum Hauptinhalt springen

XML Serialisierung

Voraussetzungen für die Serialisierung

  • Alle zu serialisierenden Felder oder Eigenschaften müssen öffentlich sein oder mit dem [XmlElement]- oder [XmlAttribute]-Attribut versehen sein.
  • Die Klasse sollte über einen parameterlosen Konstruktor verfügen, damit der XmlSerializer eine Instanz der Klasse erstellen kann.
  • Spezielle Datentypen wie z.B. DateTime oder TimeSpan müssen als solche gekennzeichnet werden, damit sie korrekt serialisiert werden.
  • Wenn der XmlSerializer mit einer StreamWriter-Instanz arbeitet, muss die Codierung des Streams auf UTF-8 festgelegt werden.

Personen Klasse

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }

private int? age;
public int? Age
{
get
{
if (age != null)
{
return age;
}
age = DateTime.Today.Year - DateOfBirth.Year;
if (DateOfBirth > DateTime.Today.AddYears(-1))
age--;
return age;
}
}

public void Print()
{
Console.WriteLine($"First Name: {FirstName}");
Console.WriteLine($"Last Name: {LastName}");
Console.WriteLine($"Date of Birth: {DateOfBirth.ToShortDateString()}");
Console.WriteLine($"Age: {Age}");
}
}

Serialisierung

XmlSerializer serializer = new XmlSerializer(typeof(Person));
Person person = new Person { FirstName = "John", LastName = "Doe", DateOfBirth = new DateTime(1988, 01, 22) };
FileStream fileStream = new FileStream(@"c:\tmp\person.xml", FileMode.Create);
serializer.Serialize(fileStream, person);
fileStream.Close();

Deserialisierung

FileStream fileStream = new FileStream(@"c:\tmp\person.xml", FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(Person));
Person person = (Person)serializer.Deserialize(fileStream);

person.Print();

Kommentare