以前,为了保存某些应用程序的设置,我使用了:
TSettings = class(TPersistent)
使用单行保存所有内容的 TJvAppXMLFileStorage 组件:
JvAppXMLFileStorage.WritePersistent(...);
但是现在,我正在使用TObjectList作为TSettings类中的属性。
所以我放弃了TCollection / TCollectionItem以支持泛型 ...
序列化时,没有项目列表 ...我认为这是因为TObjectList不是来自TPersistent。
如何使用 TJvAppXMLFileStorage 序列化 TObjectList<> ?
答案 0 :(得分:2)
我通过调用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容器的兼容性。
我希望这可以帮到你!