加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用TJvAppXMLFileStorage将Delphi TObjectList类型序列化为

发布时间:2020-12-15 09:47:20 所属栏目:大数据 来源:网络整理
导读:以前,为了保存某些应用程序的设置,我使用了: 容器的TSettings = class(TPersistent) 要在已发布的属性中序列化的每个数据 对象列表是TCollection和TCollectionItem类型 使用单行保存所有内容的TJvAppXMLFileStorage组件: JvAppXMLFileStorage.WritePersist
以前,为了保存某些应用程序的设置,我使用了:

>容器的TSettings = class(TPersistent)
>要在已发布的属性中序列化的每个数据
>对象列表是TCollection和TCollectionItem类型
>使用单行保存所有内容的TJvAppXMLFileStorage组件:

JvAppXMLFileStorage.WritePersistent(…);

但是现在,我正在使用TObjectList作为TSettings类中的属性.
??所以我放弃了TCollection / TCollectionItem,转而使用Generics ……
序列化时,没有项目列表……我认为这是因为TObjectList不是来自TPersistent.

如何序列化我的TObjectList<>与TJvAppXMLFileStorage?

解决方法

我通过调用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团队提交补丁,以增加与所有Generics容器的兼容性.

我希望这可以帮到你!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读