gpt4 book ai didi

json - 将集合序列化和反序列化为 JSON Delphi

转载 作者:行者123 更新时间:2023-12-05 07:44:32 32 4
gpt4 key购买 nike

我搜索了很多,但找不到可行的解决方案。很可能是因为我是 Delphi 的新手(并且来自 C#)。

我有一个带有以下类声明的单元:

TReplaceField = class
public
Key: string;
Value: string;
constructor Create; overload;
constructor Create(strKey, strValue: string); overload;
end;

类也可以记录,就像评论中建议的那样。

我想创建它的集合,可以是数组,TList<T> ,或在这种情况下最适合的任何方式,然后将其序列化为 JSON(以存储它),然后反序列化以循环遍历字段。

我找到了 REST.JSONTJson.ObjectToJsonString() ,适用于 1 个对象。

但是如果我传递一个 array of TReplaceField ,它给了我一个编译错误:

E2010 Incompatible types: 'TObject' and 'Dynamic array'

当我使用 TList在运行时,我得到一个不同的错误:

type tkPointer is not currently supported

在 C# 中,所有这些都非常简单,只需几行代码。我非常困惑如何在 Delphi 中执行此操作(除了通过字符串连接手动创建 JSON 之外)。

更新:有了 David 的提示,我已经开始进行序列化了。一个对象的反序列化也有效,但集合的反序列化无效。

我的类(class)现在看起来像这样:

TReplaceField = class
private
FKey : string;
FValue : string;
published
property Key : string read FKey write FKey;
property Value : string read FValue write FValue;
public
constructor Create; overload;
constructor Create(strKey, strValue: string); overload;
end;
  • 序列化一个对象:mmoJson.Lines.Text := TJson.ObjectToJsonString(Field);好的

  • 反序列化一个对象:JsonToObject<TReplaceField>(mmoJson.Lines.Text);好的

  • 序列化集合:mmoJson.Lines.Text := TJson.ObjectToJsonString(FieldList);好的

  • 反序列化集合:JsonToObject<TReplaceField>(mmoJson.Lines.Text);失败,消息:

    EConversionError with message 'Internal: Cannot instantiate type System.Generics.Collections.TList<uReplaceField.TReplaceFieldRec>'

ReplaceField 使用记录而不是类给出相同的结果。

快到了。我缺少什么才能使其完全正常工作?

最佳答案

type
TReplaceCollect = TList<TReplaceField>;

添加这个课后声明。

关于json - 将集合序列化和反序列化为 JSON Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808092/

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