当前位置:  开发笔记 > Android > 正文

将Delphi对象树序列化为XML的好方法是什么 - 使用RTTI而不是自定义代码?

如何解决《将Delphi对象树序列化为XML的好方法是什么-使用RTTI而不是自定义代码?》经验,为你挑选了4个好方法。

将Delphi对象树序列化为XML的好方法是什么 - 使用RTTI而不是自定义代码?

我本来希望发现这个功能已经内置到Delphi中,但它似乎并没有.

我发现了一些似乎可以执行此功能的组件(在下面发布).你有没有使用过它们或其他产品?你有自己的建造吗?我在Delphi中遗漏了一些明显的东西吗?



1> Andreas Haus..:

您可以使用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;



2> Marek Jedliń..:

JVCL是一种选择,但如果你更喜欢一个小型的独立库,那就是OmniXML(Mozilla Public License 1.1,http://www.omnixml.com/).我在几个项目中成功使用它,我发现它是Delphi中最简单的XML库.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' ); 



3> Mattias Ande..:

DragonSoft的XML类序列化器

链接: http ://www.dragonsoft.us/delphi_vcl.php

许可:根据Mozilla公共许可证("MPL")1.1版获得许可

Quote:允许通过XML序列化/反序列化VCL对象/组件.存储/恢复对象的状态(已发布的属性).特殊课程支持 - TStrings,TCollection,TPicture.全过程控制.



4> Mattias Ande..:

Simdesign的NativeXml

链接: http ://www.simdesign.nl/xml.html

执照: 29,95欧元

Quote:本机Delphi XML解析器和编写器.独特功能:直接在XML中存储,读取和创建任何TPersistent对象(参见Example5).这是通过使用RTTI(运行时类型信息)遍历所有对象的已发布属性来完成的.此功能仅适用于D5及更高版本.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有