カスタム コードではなく RTTI を使用して、Delphi オブジェクト ツリーを XML にシリアル化する良い方法は何ですか?
この機能がすでに Delphi に組み込まれていることを知りたかったのですが、そうではないようです。
この機能を実行する可能性があると思われるいくつかのコンポーネント (以下に投稿) を見つけました。それらのいずれか、または他の製品を使用したことがありますか? 自分で作ったことがありますか?Delphi で明らかな何かが欠けていますか?
カスタム コードではなく RTTI を使用して、Delphi オブジェクト ツリーを XML にシリアル化する良い方法は何ですか?
この機能がすでに Delphi に組み込まれていることを知りたかったのですが、そうではないようです。
この機能を実行する可能性があると思われるいくつかのコンポーネント (以下に投稿) を見つけました。それらのいずれか、または他の製品を使用したことがありますか? 自分で作ったことがありますか?Delphi で明らかな何かが欠けていますか?
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;
JVCL は 1 つの選択肢ですが、小さな自己完結型のライブラリを好む場合は、OmniXML (Mozilla Public License 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' );
DragonSoft の XML クラス シリアライザ
リンク: http://www.dragonsoft.us/delphi_vcl.php
ライセンス: Mozilla Public License (「MPL」) バージョン 1.1 に基づいてライセンス供与
引用: XML 経由で VCL オブジェクト/コンポーネントをシリアライズ/デシリアライズできます。オブジェクトの状態を保存/復元します (公開されたプロパティ)。特別なクラスのサポート - TStrings、TCollection、TPicture。完全なプロセス制御。
Simdesign の NativeXml
リンク: http://www.simdesign.nl/xml.html
ライセンス: € 29,95
引用:ネイティブの Delphi XML パーサーおよびライター。独自の機能: 任意の TPersistent オブジェクトを XML との間で直接保存、読み取り、作成します (例 5 を参照)。これは、RTTI (ランタイム型情報) を使用して、オブジェクトの公開されたすべてのプロパティを反復処理することによって行われます。この機能は、D5 以降でのみ使用できます。
JVCL の TJvTranslator.ComponentToXML
リンク: http://sourceforge.net/project/showfiles.php?group_id=45786&package_id=42327
ライセンス: Mozilla Public License (「MPL」) バージョン 1.1 に基づいてライセンス供与
観察:再帰的なシリアル化を行っているように見えますが、それが明らかに「翻訳」を目的としているという事実は、私を一時停止させます。
SOAP XMLを使用してD2006のシリアライザーを作成しました:http://jankajanos.spaces.live.com/blog/cns!C3E2695FC6F7B0A4! 791.entry
しかし、D2009のジェネリック版もあります。