gpt4 book ai didi

delphi - 保存/加载 TObject(TPercient) 到 XML

转载 作者:行者123 更新时间:2023-12-03 15:55:15 24 4
gpt4 key购买 nike

大家。

我正在尝试拯救我的类(class):

TA= class(TPersistent)
private
FItems: TObjectList<TB>;

FOnChanged: TNotifyEvent;
public
constructor Create;
destructor Destroy; override;
...
procedure Delete(Index: Integer);
procedure Clear;
procedure SaveToFile(const FileName: string);
...
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
end;

使用以下代码进行归档:

var
Storage: TJvAppXMLFileStorage;
begin
Storage := TJvAppXMLFileStorage.Create(nil);
try
Storage.WritePersistent('', Self);
Storage.Xml.SaveToFile(FileName);
finally
Storage.Free;
end;

但文件始终为空。

我做错了什么?

最佳答案

看起来 TJvCustomAppStorage 不支持属性中的泛型。该代码未使用扩展 RTTI,并且对 TJvCustomAppStorage.GetPropCount 的调用返回 0。

这引出了另一个问题 - Are there Delphi object serialization libraries with support for Generics?

我的测试代码:

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes, Generics.Collections, JvAppXmlStorage;
type

TA = class(TPersistent)
private
FItems: TObjectList<TPersistent>;
public
constructor Create;
published
property
Items: TObjectList < TPersistent > read FItems write FItems;
end;

{ TA }

constructor TA.Create;
begin
FItems := TObjectList<TPersistent>.Create;
end;

var
Storage: TJvAppXMLFileStorage;
Test: TA;
begin
Test := TA.Create;

Test.Items.Add(TPersistent.Create);

Storage := TJvAppXMLFileStorage.Create(nil);
try
Storage.WritePersistent('', Test);
WriteLn(Storage.Xml.SaveToString);
ReadLn;
finally
Storage.Free;
end;

end.

关于delphi - 保存/加载 TObject(TPercient) 到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com