una serializar serialización qué objetos net clase xml delphi serialization xml-serialization rtti

serialización - ¿Cuál es una buena forma de serializar el árbol de objetos Delphi en XML, utilizando RTTI y no un código personalizado?



serializar una clase c# (7)

Puede usar el componente JVCL TJvAppXMLFileStorage para serializar las clases derivadas de TPersistent.

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;

¿Cuál es una buena manera de serializar un árbol de objetos Delphi en XML, utilizando RTTI y no un código personalizado?

Me hubiera encantado encontrar que esta característica ya está integrada en Delphi, pero no parece ser así.

He encontrado algunos componentes (publicados, a continuación) que parecen que podrían realizar esta función. ¿Has usado alguno de ellos u otra oferta? ¿Has construido el tuyo? ¿Me estoy perdiendo algo obvio, en Delphi?


NativeXml de Simdesign

Enlace: http://www.simdesign.nl/xml.html

Licencia: € 29,95

Cita: un analizador sintáctico y escritor nativo de Delphi. Característica única: Almacene, lea y cree cualquier objeto TPersistent desde / hacia XML directamente (vea el Ejemplo 5). Esto se hace al iterar a través de todas las propiedades publicadas de los objetos mediante el uso de RTTI (información de tipo de tiempo de ejecución). Esta función solo está disponible para D5 y superiores.


Serializador de clase XML de DragonSoft

Enlace: http://www.dragonsoft.us/delphi_vcl.php

Licencia: Licencia bajo la Licencia Pública de Mozilla ("MPL") versión 1.1

Cita: permite serializar / deserializar objetos / componentes VCL a través de XML. Almacenar / restaurar el estado del objeto (propiedades publicadas). Soporte de clases especiales - TStrings, TCollection, TPicture. Control completo del proceso



JVCL es una opción, pero si prefiere una biblioteca pequeña e independiente, está OmniXML (Mozilla Public License 1.1, http://www.omnixml.com/ ). Lo he utilizado con éxito en varios proyectos, y me parece la biblioteca XML más simple para usar en Delphi. OmniXML viene con la unidad ''OmniXMLPersistent'', que hace lo que necesita a través de RTTI, al igual que la solución JVCL.

// 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 significa que las propiedades se almacenarán como atributos de elementos XML; ofIndent producirá un código muy sangrado para facilitar la lectura.

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