Um Objekte in einer Datei speichern zu können, müssen diese in Strings eines bestimmten Formats umgewandelt werden. Diesen Prozess nennt man Serialisieren. Erst wenn die Daten in String-Form vorliegen, können diese in einer Text-Datei gespeichert werden.
Den Umgekehrten Prozess, also das Interpretieren des String-Formates und das Umwandeln der Daten in ein Objekt im Arbeitsspeicher, nennt man Parsen.
Als String-Format sind viele Formate denkbar. Das Seq-Modul speichert alle Daten als Strings in einem kompakten Format, das sehr einfach zu parsen ist. Das Format lässt sich hierarchisch strukturieren. Dadurch wird ist es erweiterbar. Das heisst, wenn sich die Definition eines Objektes ändert, sind alte Daten trotzdem noch brauchbar (kompatibilität zwischen Versionen). Zudem ist das Format robust, sodass Fehler in einer Datei nicht zu Abstürzen führen.
Daten wie Zahlen und Boolean werden in folgendes String-Format umgewandelt:
<Wert>|
Strings werden in folgendes Format umgewandelt:
<Länge>|<String>|
Properties eines Objektes können einfach aneinander gekettet werden. Sie müssen aber in der gleichen Reihenfolge später wieder ausgelesen werden.
Listen werden gespeichert, indem zuerst die Länge der Liste als Wert und danach die Listenelemente serialisiert werden. So kann beim Parsen zuerst die Listengrösse eingelesen werden, die Liste entsprechend dimensioniert werden, und danach können die Listenelement gelesen werden.
Wenn meherere Objekte oder eine Objekthierarchie serialisiert werden soll, können pro Objekt Sub-Strings erstellt und gespeichert werden. Dadurch wird die Hierarchie ins String-Format abgebildet. Wenn Objekte um Properties erweitert werden, können dadurch alte Files trotzdem noch eingelesen werden. Die im File fehlenden Werte werden beim Parsen einfach durch passende Defaultwerte ersetzt.
Hier ein einfaches Beispiel, wie eine Klasse im Seq-Format aussehen kann.
class CUser public Name ' as string public Password ' as string public IsAdmin ' as bool end class dim user = new CUser user.Name = "Test" user.Password = "***" user.IsAdmin = false
Beim Serialisieren würde dieses Objekt wiefolgt Formatiert:
15|4|Test|3|***|0||
Die erste Zahl (15) gibt an, aus wie vielen Zeichen das Serialisierte Objekt user besteht: Das Objekt user ist als String "4|Test|3|***|0|" der Länge 15 Zeichen gespeichert. Die einzelnen Properties dieses Objektes können entsprechend ausgelesen werden:
Eine Objekt-Hierarchie wird serialisiert, indem sich jedes Objekt der Hierarchie selbst serialisiert. Dabei werden Properties vom Typ Objekt rekursiv serialisiert. Jedes Objekt ist nach dem Serialisieren ein String im Seq-Format.
Die Properties eines Objektes werden einfach der Reihe nach Serialisiert und die entsprechenden Seq-Strings werden dann aneinander gekettet und bilden dadurch den Seq-String dieses Objektes.
Der Seq-String kann einfach in ein Textfile geschrieben werden.
Die Daten eines ganzen Objektes oder einer Objekt-Hierarchie liegen als Seq-String vor. Dieser String wird dann mit Hilfe des CParser rekursiv in seine Bestandteile zerlegt und die so ermittelten Werte werden den Properties des entsprechenden Objektes zugewiesen.