2008-12-15 44 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

相關問題