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

时间:2017-03-15 11:11:33

标签: json delphi serialization

我搜索了很多,但找不到合适的解决方案。很可能是因为我对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不兼容的类型:'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的类会产生相同的结果。

几乎就在那里。为了让它充分发挥作用,我错过了什么?

0 个答案:

没有答案