Bryan Albrecht

Serializaton und Deserializaton

Serializaton bedeutet auf Deutsch anordnen. Serializaton wird dazu genutzt, um ganze Objekte zu speichern. Gespeichert werden dabei das angegebene Objekt und alle anderen Objekte, von denen es erbt.

Um Serializaton und Deserializaton überhaupt nutzen zu können, muss man eine Bibliothek einbinden.

  1. using System.Runtime.Serialization.Formatters.Binary;

Ebenso fürs Schreiben von Dateien.

  1. using System.IO;

Bei jeder Klasse, aus der ein Objekt serialisiert werden soll, muss vor dem Beginn der Klasse [Serializable] stehen.

Beispiel:

  1. [Serializable]
  2. class Guy : Creature
  3. {
  4. public int money = 0;
  5. }
  6. [Serializable]
  7. class Creature
  8. {
  9. public int size = 0;
  10. }

Wenn der Tag [Serializable] nicht vorhanden ist, aber man das Objekt trotzdem serialisieren will, wird im Programm eine Fehlermeldung ausgegeben.

Eine Klasse, welche von einer zu serialisierenden Klasse erbt, wird nicht serialisiert und muss deshalb auch den [Serializable] Tag nicht haben.

Beispiel:

  1. [Serializable]
  2. class Guy
  3. {
  4. public int money = 0;
  5. }
  6. class woman : Guy
  7. {
  8. public string hairColor = "blond";
  9. }

Ein serialisiertes Objekt kann in eine Datei geschrieben werden.

Beispiel:

  1. using (Stream output = File.Create("Guy_File.dat"))
  2. {
  3. BinaryFormatter formatter = new BinaryFormatter();
  4. formatter.Serialize(output, joe);
  5. }

Ebenso kann ein gespeichertes Objekt wider aus einer Datei gelesen werden. Dazu brauch man aber Deserializaton

Beispiel:

  1. using (Stream input = File.OpenRead("Guy_File.dat"))
  2. {
  3. BinaryFormatter formatter = new BinaryFormatter();
  4. joe = (Guy)formatter.Deserialize(input);
  5. }

Wenn ein Objekt serialisiert wurde, wird es nicht aus dem laufenden Programm gelöscht. Man kann weiterhin Dinge im Objekt verändern. Diese Dinge werden aber beim deserialisieren überschrieben.

Ebenso wird der Wert, welchen man in einer Datei gespeichert hat überschrieben, wenn man das Objekt erneut serialisiert.