2008-12-15 49 views
13

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

我本来希望能够发现这个特性已经嵌入到Delphi中,但似乎并不存在。

我发现了一些看起来像他们可能会执行此功能的组件(发布,下面)。你有没有使用他们或其他产品?你建立了自己的?在Delphi中我错过了一些明显的东西吗?

回答

20

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

这个效果非常好!谢谢! – 2008-12-16 00:14:57

6

华龙网的XML类串行

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

许可: Mozilla公共许可证( “MPL”)1.1版

报价授予许可:允许对通过XML序列化/反序列化VCL对象/组件。存储/恢复对象的状态(发布的属性)。特殊类支持 - TStrings,TCollection,TPicture。全过程控制。

5

Simdesign的NativeXml

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

许可:€29,95

报价:原生的Delphi XML解析器和作家。独特功能:直接在XML中存储,读取和创建任何TPersistent对象(请参阅示例5)。这是通过使用RTTI(运行时类型信息)遍历所有对象的已发布属性来完成的。此功能仅适用于D5及更高版本。

14

JVCL是一种选择,但如果你喜欢小的,独立的图书馆,有OmniXML(Mozilla公共许可证1.1,http://www.omnixml.com/)。我已经在几个项目中成功地使用了它,并且我发现它是Delphi中最简单的XML库。 OmniXML附带'OmniXMLPersistent'单元,它像JVCL解决方案那样通过RTTI完成你所需要的功能。

// 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'); 
+0

有趣的替代品!感谢您的建议。 – 2008-12-16 15:10:52

3

我使用SOAP XML做了一个串行的D2006: http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4!791.entry

但对于D2009通用版了。

+2

不错的..对于那些不懂匈牙利语“符号”的人...使用此链接:http://translate.google.com/translate?hl=zh-CN&sl=hu&tl=zh-CN&u=http://jankajanos.spaces .live.com /博客/ CNS!C3E2695FC6F7B0A4!791.entry – 2009-07-17 08:01:53

相关问题