Delphi:将对象流转换为XML,包括数组属性

时间:2011-02-08 15:26:06

标签: xml delphi serialization properties xml-serialization

我们有一个巨大的数据对象结构,包含许多实际数组的属性。现在,我们需要将数据流式传输到XML文档。

为此,我们考虑使用NativeXML组件进行流式传输。它使用与TComponent流相同的机制。这非常有效,除了它不会流式传输索引属性。

无论如何都有办法做到这一点,还是有能够做到这一点的组件?

2 个答案:

答案 0 :(得分:3)

索引属性不会暴露给RTTI(并且仍然不在Delphi XE中),它们也不会被TComponent流式传输。

如果你想继续使用TComponent机制(或基于纯RTTI的流媒体),一个选项是使用TCollection,它确实以“作为数组”流式传输。但是,这对您的阵列施加了严格的限制,即。他们的容器必须是TCollection的子类,它们的项必须是TCollectionItem的子类。

我不知道NativeXML组件,但如果它们基于TWriter / TReader,另一种选择可能是使用DefineProperties,这允许您定义自己的属性,然后您可以流式传输任何内容希望,无论你希望如何 这涉及到流的特殊代码,但如果您的数组不是太具体,您可以将该代码放在类属性中,并处理您的一个根类中的所有内容。

答案 1 :(得分:0)

最后,我们使用了一些额外的类(继承自TPersistent)来存储数组属性;事实证明只有一组有限的数组类型。 Delphi的索引属性非常有用:我们可以指定一个getter函数,并将数组的大多数固定元素定义为引用一个getter和索引的单独属性。这些属性现在被序列化为正确的XML元素,并且具有正确的名称。

使用它们向所有类添加构造函数和析构函数需要花费一些繁琐的时间。

无论如何,感谢所有的建议!