我搜索了很多,但找不到合适的解决方案。很可能是因为我对Delphi很新(并且来自C#)。
我有一个包含以下类声明的单元:
TReplaceField = class
public
Key: string;
Value: string;
constructor Create; overload;
constructor Create(strKey, strValue: string); overload;
end;
类也可以记录,就像评论中建议的那样。
我想创建它的集合,无论是数组,TList<T>
,还是在这种情况下最适合的任何集合,然后将其序列化为JSON(以存储它),然后将其反序列化以循环遍历字段。
我找到了REST.JSON
和TJson.ObjectToJsonString()
,它适用于1个对象。
但是如果我传递array of TReplaceField
,它会给我一个编译错误:
E2010不兼容的类型:'TObject'和'Dynamic array'
当我在运行时使用TList
时,我得到一个不同的错误:
目前不支持类型tkPointer
在C#中,所有这些都非常简单,就像几行代码一样。我非常关注如何在Delphi中进行操作(除了通过字符串连接手动创建JSON)。
更新 有了David的提示,我的序列化工作正常。也可以对一个对象进行反序列化,但不能对集合进行反序列化。
我的班级现在看起来像这样:
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'内部:无法实例化类型System.Generics.Collections.TList&lt; uReplaceField.TReplaceFieldRec&gt;'
使用记录代替ReplaceField
的类会产生相同的结果。
几乎就在那里。为了让它充分发挥作用,我错过了什么?