2008-12-15 7 views
13

Was ist eine gute Möglichkeit, eine Delphi-Objektbaumstruktur in XML zu serialisieren - mit RTTI und nicht mit benutzerdefiniertem Code?Was ist eine gute Möglichkeit, Delphi-Objektbaum in XML zu serialisieren - mit RTTI und nicht mit benutzerdefiniertem Code?

Ich hätte gerne gefunden, dass diese Funktion bereits in Delphi eingebaut ist, aber es scheint nicht zu sein.

Ich habe ein paar Komponenten gefunden (gepostet, unten), die scheinen, als ob sie diese Funktion ausführen könnten. Hast du irgendwelche von ihnen oder ein anderes Angebot benutzt? Hast du dein eigenes gebaut? Fehle ich etwas Offensichtliches, in Delphi?

Antwort

20

Sie können die JVCL TJvAppXMLFileStorage-Komponente zum Serialisieren von abgeleiteten TPersistent-Klassen verwenden.

uses 
    JvAppXMLStorage; 

var 
    Storage: TJvAppXMLFileStorage; 
begin 
    Storage := TJvAppXMLFileStorage.Create(nil); 
    try 
    Storage.WritePersistent('', MyObject); 
    Storage.Xml.SaveToFile('S:\TestFiles\Test.xml'); 

    Storage.Xml.LoadFromFile('S:\TestFiles\Test.xml'); 
    Storage.ReadPersistent('', MyObject); 
    finally 
    Storage.Free; 
    end; 
end; 
+0

Das funktioniert sehr gut! Vielen Dank! –

6

Dragon XML-Klasse Serializer

-Link:http://www.dragonsoft.us/delphi_vcl.php

Lizenz: unter der Mozilla Public License ("MPL") Version 1.1

Zitat: Erlaubt VCL-Objekte/Komponenten per XML serialisieren/deserialisieren. Status des Objekts speichern/wiederherstellen (veröffentlichte Eigenschaften). Unterstützung spezieller Klassen - TStrings, TCollection, TPicture. Volle Prozesskontrolle.

5

Simdesign des NativeXml

-Link:http://www.simdesign.nl/xml.html

Lizenz: € 29,95

Zitat: Eine native XML Delphi-Parser und Schriftsteller. Eindeutiges Feature: Speichern, lesen und erstellen Sie ein TPersistent-Objekt direkt zu/von XML (siehe Beispiel5). Dies geschieht, indem alle veröffentlichten Eigenschaften der Objekte mithilfe von RTTI (Laufzeittypinformationen) durchlaufen werden. Diese Funktion ist nur für D5 und höher verfügbar.

14

JVCL ist eine Wahl, aber wenn Sie eine kleine, in sich geschlossene Bibliothek bevorzugen, gibt es OmniXML (Mozilla Public License 1.1, http://www.omnixml.com/). Ich habe es erfolgreich in mehreren Projekten verwendet und finde es als einfachste XML-Bibliothek in Delphi. OmniXML wird mit der Einheit OmniXMLPersistent ausgeliefert, die genau wie die JVCL-Lösung über RTTI funktioniert.

// saving: 
pers : TPersistent; 
// SaveToFile is a class method, so no need to instantiate the object: 
TOmniXMLWriter.SaveToFile(pers, 'd:\path\file.xml', pfAttributes, ofIndent); 

pfAttributes bedeutet, dass Eigenschaften als Attribute von XML-Elementen gespeichert werden; ofIndent wird einen gut eingerückten Code für die Lesbarkeit erzeugen.

// loading: 
TOmniXMLWriter.LoadFromFile(pers, 'd:\path\file.xml'); 
+0

Interessante Alternative! Danke für den Vorschlag. –

3

Ich habe einen Serializer für D2006 mit SOAP XML gemacht: http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4!791.entry

Aber es ist eine generische Ausgabe auch für D2009.

+2

Nice one .. für diejenigen, die nicht verstehen, Ungarische "Notation" ... verwenden Sie diesen Link: http://translate.google.com/translate?hl=de&sl=hu&tl=de&u=http://jankajanos.spaces .live.com/blog/cns! C3E2695FC6F7B0A4! 791.Eintritt –