TJSON.JsonToObject<类名>;不在德尔福工作

发布于 2025-01-17 00:41:38 字数 1055 浏览 0 评论 0原文

我正在尝试将 Json 转换为类对象,但这些值没有出现在新对象变量中。生成的对象在字符串中具有空白值,在整数中具有 0。 提前致谢。

代码:

type
Student =class
    public
    Name : string;
    Age : Integer;
end;

procedure TForm2.Button5Click(Sender: TObject);
var
  Student1, Student2: Student;
  STR: string;
begin
  Student1 := Student.Create;
  Student2 := Student.Create;

  try
  Student1.Name := 'Sam';
  Student1.Age := 24;
  str := TJson.ObjectToJsonString(Student1);
  Form2.outputMemo.Lines.Add(str);
  Student2 := TJSON.JsonToObject<Student>(str);
  Form2.outputMemo.Lines.Add(Student2.Name);
  Form2.outputMemo.Lines.Add(Student2.Age.ToString);
  finally
  Student1.Free;
  Student2.Free;
  end;
//Form2.outputMemo.Lines.Text :=TJson.ObjectToJsonObject(Student1);

end;

输出:

{"name":"Sam","age":24}

0

编辑: 我刚刚看到这个,当我将名称更改为 FName 和 FAge 时,它​​起作用了……真是太神奇了!有人能解释一下这背后的逻辑吗? Delphi Rest.JSON JsonToObject 仅适用于 f 变量

I am trying to convert Json trying to class object, but the values are not appearing in the new object variable. The resulting object has blank value in string and 0 in integer.
Thanks in advance.

Code:

type
Student =class
    public
    Name : string;
    Age : Integer;
end;

procedure TForm2.Button5Click(Sender: TObject);
var
  Student1, Student2: Student;
  STR: string;
begin
  Student1 := Student.Create;
  Student2 := Student.Create;

  try
  Student1.Name := 'Sam';
  Student1.Age := 24;
  str := TJson.ObjectToJsonString(Student1);
  Form2.outputMemo.Lines.Add(str);
  Student2 := TJSON.JsonToObject<Student>(str);
  Form2.outputMemo.Lines.Add(Student2.Name);
  Form2.outputMemo.Lines.Add(Student2.Age.ToString);
  finally
  Student1.Free;
  Student2.Free;
  end;
//Form2.outputMemo.Lines.Text :=TJson.ObjectToJsonObject(Student1);

end;

Output:

{"name":"Sam","age":24}

0

Edit:
I just saw this, and it worked when I changed the names to FName and FAge... what a sorcery!, can anyone please explain the logic behind this?
Delphi Rest.JSON JsonToObject only works with f variables

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

婴鹅 2025-01-24 00:41:38

JSON 字段到 Delphi 字段的内部映射是在它们前面加上 F 前缀并将后面的字符更改为大写。如果您想完全控制它,您可以使用属性指定 JSON 名称:

type
  Student =class
  public
    [JSONName('name')]
    Name : string;
    [JSONName('age')] 
    Age : Integer;
  end;

请注意,给定的 JSON 名称区分大小写。

您需要在使用中包含REST.Json.Types,以便可以找到属性声明。

The internal mapping of JSON fields to Delphi fields is prefixing them with F and changing the following character to upper case. If you want complete control over this you can specify the JSON name with an attribute:

type
  Student =class
  public
    [JSONName('name')]
    Name : string;
    [JSONName('age')] 
    Age : Integer;
  end;

Note that the JSON names given are case sensitive.

You need to include REST.Json.Types to the uses so that the attribute declaration can be found.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文