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 以便可以找到属性声明。
我正在尝试将 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 以便可以找到属性声明。