TJSON.JsonToObject<classname> 在 Delphi 中不工作

TJSON.JsonToObject<classname> not working in Delphi

我正在尝试将 Json 对象转换为 class 对象,但值没有出现在新对象变量中。生成的对象在字符串中具有空白值,在整数中具有 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 时它起作用了……真是个魔法!,谁能解释一下这背后的逻辑?

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

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

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

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