- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
之前,为了保存一些应用程序的设置,我使用:
TSettings = class(TPersistent)
TJvAppXMLFileStorage 组件用单行保存所有内容:
JvAppXMLFileStorage.WritePersistent(...);
但是现在,我正在使用 TObjectList 作为 TSettings 类中的属性。
所以我放弃了 TCollection/TCollectionItem 以支持 Generics ...
序列化时,没有项目列表 ...我认为这是因为 TObjectList 不是来自 TPersistent。
如何使用 TJvAppXMLFileStorage 序列化我的 TObjectList<>?
最佳答案
我已经通过调用 JvAppXMLFileStorage.WriteList
用几行代码成功地序列化了我的通用列表。 .
首先,这就是我序列化列表的方式。 WriteGenericsObjectListItem<TMyClass>
方法详述如下。
JvAppXMLFileStorage.WriteList('mylist',TObject(MyGenericList), MyGenericList.Count, WriteGenericsObjectListItem<TMyClass>);
然后,我只需要定义如何序列化通用列表的每个项目。为此,我创建了一个通用方法:
procedure TMySerializer.WriteGenericsObjectListItem<T>(Sender: TJvCustomAppStorage;
const Path: string; const List: TObject; const Index: Integer; const ItemName: string);
begin
if(List is TObjectList<T>) then
if Assigned(TObjectList<T>(List)[Index]) then
Sender.WritePersistent(Sender.ConcatPaths([Path, Sender.ItemNameIndexPath (ItemName, Index)]), TPersistent(TObjectList<T>(List)[Index]));
end;
就是这样!
我没有修改 JCL/JVCL 代码,只是将它们添加到我的程序中。
我想我会向 JCL/JVCL 团队提交一个补丁,以添加与所有泛型容器的兼容性。
希望对您有所帮助!
关于xml - 如何使用 TJvAppXMLFileStorage 将 Delphi TObjectList<TMyClass> 类型序列化为 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462029/
我想知道从类引用创建的对象是否是特定类或其任何后代的实例。 换句话说,我想要一个 bool 表达式,例如 var is TMyClass 但是其中 var 被替换为涉及类引用变量的表达式。这听起来很容
为什么我不能将类分配给其基本接口(interface)类型的变量。 考虑我们有以下内容: IInt1 = interface procedure Test1; end; IInt2 = inter
我遇到了以下代码,它们都在一个文件/类中。我省略了细节,它是我感兴趣的构造。为什么同一个类有两个不同的声明,它们有何不同?第二个声明的语法目的是什么? public abstract class My
之前,为了保存一些应用程序的设置,我使用: 容器的 TSettings = class(TPersistent) 要在已发布属性中序列化的每个数据 对象列表是TCollection和TCollecti
我是一名优秀的程序员,十分优秀!