Einfaches Beispiel für Serialisierung und Deserialisierung
Das ist keine Diskussion über Attribute und Interfaces für die Serialisierung!
Um ein serialisierbares Objekt tatsächlich abzulegen oder zu lesen, sind zwei Dinge erforderlich:
- Ein Stream, in den geschrieben oder gelesen werden kann
- Ein Formatter, welcher den Inhalt festlegt, welcher in den Stream geschrieben wird
Beispielhaft sind zum Beispiel der BinaryFormatter und der SoapFormatter. Alle Formatter implementieren das IFormatter Interface. So ist es einfach möglich mehrere Formate zu unterstützen.
Als erstes muss eine Variable des Typs IFormatter angelegt werden, welche dann gemäß der Auswahl mit einer Implementierung gefüllt wird:
1 2 3 4 5 6 | IFormatter formatter = null; #if (XML_FORMAT) formatter = new SoapFormatter(); #else formatter = new BinaryFormatter(); #endif |
Dieser Code erstellt uns einen Formatter, welcher in XML (Soap) oder Binärformat ein serialisierbares Objekt beschreibt. Der formatter übernimmt dann mit einem Sreamobjekt das Schreiben des Objektes:
1 2 3 4 5 6 7 8 9 | Hashtable test = new HashTable(); // füllen der Hashtable FileStream stream = new FileStream(/* Parameter in MSDN nachlesen */); formatter.Serialize(stream, test); stream.Flush(); stream.Close(); stream.Dispose(); stream = null; formatter = null; |
Das Lesen ist ebenso einfach:
1 2 3 4 5 6 7 8 | FileStream stream = new FileStream(/* Parameter in MSDN nachlesen */); Hashtable test = (Hashtable)formatter.Deserialize(stream); stream.Flush(); stream.Close(); stream.Dispose(); stream = null; formatter = null; // Auf Hashtable zugreifen |
