Hallo Andreas,
nachdem du in dem
anderen Thread bereits auf mein
RakBinaryStreamData hingewiesen wurdest, nehme ich an, dass Du zumindest grob weißt wofür man es verwenden kann.
Um dein
XML-Problem zu lösen kannst du prinzipiell genauso vorgehen, wie ich bei RakBinaryStreamData. Der Unterschied besteht in der Hauptsache darin, dass bei dir ein
XML-Format und bei RakBinaryStreamData ein binäres Format abgespeichert wird. Bei beiden Wegen kann man mit Hilfe von Tags eine hierarchische Struktur anlegen, womit das Problem der Unterobjekte gelöst wäre.
Ich gehe immer gern den Weg, dass die Klassen selbst wissen, wie sie sich "abspeichern" können. Das ist jetzt vielleicht etwas missverständlich, da die meisten unter "Abspeichern", das Speichern in einer Datei oder eine andere Serialisierung verstehen. Das "Abspeichern" ist im ersten Schritt aber noch keine Serialisierung, sondern ein Umwandlen in ein anderes Datenformat. Bei RakBinaryStreamData werden die Daten der Objekte in eine hierarchische Objektstruktur der Klassen von RakBinaryStreamData umgehängt. Bei
XML werden die Daten der Objekte in eine hierarchische Objektstruktur der von dir verwendeten
XML-Klassen umgehängt.
Erst danach wird durch den Aufruf der entsprechenden Methode die Serialisierung durchgeführt. Bei RakBinaryStreamData kommt dabei ein binärer KuddelMuddel heraus, bei
XML eine Textdatei.
Aber wieder zurück dazu, dass die Klassen die Daten selbst "abspeichern", sprich in ein anderes Format umhängen. Dazu verpasse ich den Klassen immer die Methode
Code:
procedure SaveToBinaryTag(Tag: TRakBinaryTag);
Für
XML hattest du in dem anderen Thread ja schon etwas ähnliches angedacht, nämlich
Code:
procedure SaveToXML(const XmlDoc: IXMLDocument);
Hier darfst du als Parameter aber nicht die Document-Klasse verwenden, sondern die Tag-Klasse deines
XML-"Parser". (so nebenbei: ich verwende bevorzugt
OpenXML)
Ich hoffe das reicht als Anstoß