AdSense

Montag, 8. Juli 2013

C# - Klasse in xml-Datei serialisieren

(English version) Um Klassenstrukturen in eine Datei zu schreiben ohne sich dabei um das Dateiformat kümmern zu müssen gibt es bei C# einen Serializer. Dieser kann ganz einfach komplette Klassen (welche durchaus auch Unterklassen beinhalten dürfen). In einer Klasse muss jedes Objekt, welches mit abgespeichert werden soll, markiert werden. Das sieht dann so aus:

[DataContract()]
public class TestClass
{
  [DataMember()]
  public int testInt = 5;
  [DataMember()]
  public string testString = "Test";
}


Man muss also vor die Klasse [DataContract()] schreiben und dann vor jedes Objekt, welches abgespeichert werden soll [DataMember()]. Ich musste bei mir in den Verweisen von Visual Studio noch System.Runtime.Serialization hinzufügen.

Um nun z.B. die Klasse testClass welche vom Typ TestClass ist abzuspeichern, benötigt man 5 Zeilen Code. Das sieht dann so aus:

var writer = new FileStream("outputFileName.xml", FileMode.Create);
Type type = testClass.GetType();
DataContractSerializer serializer = new DataContractSerializer(type);
serializer.WriteObject(writer, testClass);
writer.Close();


Die produzierte Datei sieht dann folgendermaßen aus:

<?xml version="1.0"?>
<TestClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/SerializeTest">
<test1>5</test1>
<test2>Test</test2>
</TestClass>


Man kann also sofort auf einen Blick sehen, welchen Wert welches Objekt hat, was beim Serialisieren in eine Datei im binary-Format nicht möglich ist.

Um nun die Datei wieder einzulesen geht man folgendermaßen vor:

var reader = new FileStream("outputFileName.xml", FileMode.Open);
Type type = testClass.GetType();
DataContractSerializer deSerializer = new DataContractSerializer(type);
testClass = (TestClass)deSerializer.ReadObject(reader);
reader.Close();

Keine Kommentare:

Kommentar veröffentlichen