Каков хороший способ сериализации дерева объектов Delphi в XML-используя RTTI, а не пользовательский код?
каков хороший способ сериализации дерева объектов Delphi в XML-используя RTTI, а не пользовательский код?
Я хотел бы найти, что эта функция уже встроена в Delphi, но, похоже, это не так.
Я нашел несколько компонентов (размещенных ниже), которые, похоже, могут выполнять эту функцию. Вы использовали что-нибудь из них или какое-нибудь другое приношение? Вы построили свой собственный? Я упускаю что-то очевидное, в Дельфи?
7 ответов
для сериализации производных классов TPersistent можно использовать компонент JVCL TJvAppXMLFileStorage.
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;
JVCL-один из вариантов, но если вы предпочитаете небольшую автономную библиотеку, есть OmniXML (Публичная Лицензия Mozilla 1.1,http://www.omnixml.com/). Я успешно использовал его в нескольких проектах, и я нахожу его самой простой библиотекой XML для использования в Delphi. OmniXML поставляется с блоком "OmniXMLPersistent", который делает то, что вам нужно через RTTI, как и решение 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 означает свойства сохраняются как атрибуты XML элементы; ofIndent будет производить красиво отступ код для удобочитаемости.
// loading:
TOmniXMLWriter.LoadFromFile( pers, 'd:\path\file.xml' );
сериализатор класса XML DragonSoft
ссылки: http://www.dragonsoft.us/delphi_vcl.php
лицензия: лицензируется по публичной лицензии Mozilla ("MPL") версии 1.1
цитата: позволяет сериализовать/десериализовать объекты / компоненты VCL через XML. Сохранить / восстановить состояние объекта (опубликованные свойства). Поддержка специальных классов-TStrings, TCollection, TPicture. Полный процесс управление.
NativeXml Simdesign
ссылки: http://www.simdesign.nl/xml.html
лицензия: € 29,95
цитата: собственный синтаксический анализатор и писатель Delphi XML. Уникальная функция: хранить, читать и создавать любой объект TPersistent в / из XML напрямую (см. Example5). Это делается путем итерации всех опубликованных свойств объектов с помощью RTTI (информация о типе среды выполнения). Эта функция доступно только для D5 и выше.
TJvTranslator JVCL.ComponentToXML
ссылки: http://sourceforge.net/project/showfiles.php?group_id=45786&package_id=42327
лицензия: лицензируется по публичной лицензии Mozilla ("MPL") версии 1.1
наблюдения: кажется, рекурсивная сериализация, но тот факт, что она явно предназначена для "перевода", дает мне паузу.
Я сделал сериализатор для D2006 с помощью SOAP XML: http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4!791.запись
но есть общий выпуск для D2009 тоже.
Я загрузил новую версию. Она содержит английские комментарии: http://janosjanka.spaces.live.com/blog/cns!E5C994C03FC0E370!181.запись Кроме того, он может десериализовать объект с помощью предварительно зарегистрированных типов классов. Это очень полезно, потому что вы можете десериализовать объекты без известных типов.