Что хороший путь состоит в том, чтобы сериализировать дерево объектов Delphi к XML - использование RTTI и не пользовательского кода?

Убедитесь, что вы установили для свойства Multiline значение true в textBox3.

Вы можете установить его через окно свойств после выбора textbox3 или написать строку ниже в конструкторе формы после завершения initializeComponents.

textBox3.Multiline = true;

Как только это будет сделано, Environment.NewLine или \ r \ n оба должны работать.

15
задан Johan - reinstate Monica 1 October 2015 в 11:49
поделиться

7 ответов

Можно использовать компонент JVCL TJvAppXMLFileStorage для сериализации производных классов 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;
21
ответ дан 1 December 2019 в 00:11
поделиться

JVCL является одним выбором, но если Вы предпочитаете небольшую, автономную библиотеку, существует OmniXML (Лицензия 1.1 Общественности Mozilla, 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' ); 
14
ответ дан 1 December 2019 в 00:11
поделиться

Сериализатор класса DragonSoft XML

Ссылка: http://www.dragonsoft.us/delphi_vcl.php

Лицензия: Лицензируемый в соответствии с Лицензией Общественности Mozilla ("MPL") версия 1.1

Кавычка: Позволяет сериализировать/десериализовывать Объекты/Компоненты VCL через XML. Состояние хранилища/восстановления объекта (опубликованные свойства). Специальная поддержка классов - TStrings, TCollection, TPicture. Полное управление процессом.

6
ответ дан 1 December 2019 в 00:11
поделиться

NativeXml Simdesign

Ссылка: http://www.simdesign.nl/xml.html

Лицензия: 29,95€

Кавычка: собственный Delphi синтаксический анализатор XML и устройство записи. Уникальная функция: Хранилище, считайте и создайте любой объект TPersistent к/от XML непосредственно (см. Example5). Это сделано путем итерации через все опубликованные свойства объектов при помощи RTTI (информация о типах во время выполнения). Эта функция только доступна для D5 и.

5
ответ дан 1 December 2019 в 00:11
поделиться

Я сделал сериализатор для D2006 с помощью SOAP XML: http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4!791.entry

Но существует универсальный выпуск для D2009 также.

3
ответ дан 1 December 2019 в 00:11
поделиться

TJvTranslator JVCL. ComponentToXML

Ссылка: http://sourceforge.net/project/showfiles.php?group_id=45786&package_id=42327

Лицензия: Лицензируемый в соответствии с Лицензией Общественности Mozilla ("MPL") версия 1.1

Наблюдение: Кажется, делает рекурсивную сериализацию, но то, что она ясно предназначается для "Перевода", дает мне паузу.

4
ответ дан 1 December 2019 в 00:11
поделиться

Я загрузил новую версию. Он содержит комментарии на английском языке: http://janosjanka.spaces.live.com/blog/cns!E5C994C03FC0E370!181.entry Кроме того, он может десериализовать объект с помощью предварительно зарегистрированных типов классов. Это очень полезная вещь, потому что вы можете десериализовать объекты, не зная типов.

1
ответ дан 1 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: