Auto Serialization - BCB 2009; Gibt es da was nettes?



  • Mir ist unlängst aufgefallen, dass mindestens 50% meiner Programmierzeit für irgendwelche Parser von eigenen Scriptdateien draufgehen für Optionen, Sprachen, ... .
    Mir wurde nahe gelegt "auto serialization" zu nutzen, doch kenne ich nur eine Möglichkeit in C# .NET.
    Was kann ich tun?



  • Wenn du nur deine eigenen Datenstrukturen serialisieren willst, kannst du das Delphi-Komponentenmodell verwenden; das Serialisieren funktioniert dann so, wie du es von DFM-Dateien für Formulare und Komponenten kennst. Stichworte zum Suchen: __published, __property, ObjectTextToBinary(). Allerdings darfst du nur Delphi-kompatible Typen für deine "veröffentlichten" Eigenschaften verwenden, also etwa String anstatt std::string, TStrings/TCollection anstatt std::vector<>, Set<> anstelle von Bitsets, und bei binären Daten mußt du mit DefineProperties() selbst für die Serialisierung sorgen. Aber wenn es vor allem um Konfigurationsdaten geht, ist diese Möglichkeit wunderbar; gerade mit Enums und Sets macht es richtig Spaß.

    Das Ganze ist natürlich bei weitem nicht so komfortabel wie etwa XStream in Java, das dir eine beliebige Objekthierarchie in XML serialisieren kann, ohne daß du auf irgendetwas achten müßtest. Seit Delphi 2010 bzw. C++Builder XE2 generieren die Compiler hinreichend viel RTTI, daß man XStream auch für Delphi/C++Builder implementieren könnte (mal ungeachtet der Besitztumsproblematik, die sich mangels Garbage Collection ergibt) - aber bisher hat das noch niemand gemacht. Es gibt zwar Projekte wie DeHL Serialization, aber mit XStream ist das noch nicht vergleichbar.

    Ansonsten noch einen Blick wert sind XML-Serializer wie der hier (ganz unten) - und natürlich der XML-Importer der IDE, der dir für eine gegebene XML-Datei ein Objektmodell zur Datenbindung generieren kann.


Anmelden zum Antworten