考虑此测试课程:
TUser = class
Name: string;
constructor Create(AName: string);
end;
TTestClass = class
Users: TList<TUser>;
constructor Create;
end;
序列化为JSON可以正常工作,但是当我尝试将其反序列化时,该列表未填充:
procedure TForm21.Button1Click(Sender: TObject);
var
u: TUser;
begin
TestClass := TTestClass.Create;
TestClass.Users.Add( TUser.Create('Nick'));
TestClass.Users.Add( TUser.Create('Mike'));
Memo1.Text := TJson.ObjectToJsonString(TestClass);
TestClass2 := TJson.JsonToObject<TTestClass>( Memo1.Text );
for u in TestClass2.Users do
Memo1.Lines.Add(Format('User %s ', [ u.Name ]));
end;
JSON输出为:
{"users":{"listHelper":[2],"items":[["Nick"],["Mike"]]}}
答案 0 :(得分:1)
字段名称通常以“ f”为前缀。 将“用户”重命名为“ fUsers”后,您的代码即可使用。
了解这一点很简单。 f在json中看起来不太好。我想这就是为什么他们在生成json时将其删除,而在解析json时将其添加的原因,将其删除。
请参阅REST.JsonReflect单元 方法: TJSONUnMarshal.ConvertFieldNameFromJson 和 TJSONConverter.ConvertFieldNameToJson