gpt4 book ai didi

delphi - 将带有数组的 delphi 对象转换为 json 时遇到问题

转载 作者:行者123 更新时间:2023-12-03 15:52:02 27 4
gpt4 key购买 nike

我一直在尝试使用 TJson.ObjectToJsonString(object) 将我的对象转换为 json 字符串。它对于简单对象工作得很好,但如果对象包含数组(静态或动态),它就会中断。创建对象的 json 字符串的正确方法是什么?我查看了 TSuperObject 但不清楚我需要做什么。

类结构

TPerson = class(TObject)
private
FID : integer;
FLastName : string;
FFirstName: string;
FEmail : string;
fMyArray : array[0..2] of boolean;

function ReadArray(i : integer):boolean;
procedure WriteArray(i : integer; val:boolean);
public
property ID : integer read FID write FID;
property LastName : string read FLastName write FLastName;
property FirstName: string read FFirstName write FFirstName;
property Email : string read FEmail write FEmail;
property MyArray[i : integer] :boolean read ReadArray write WriteArray;
end;

示例

  person := TPerson.create();
person.ID := 25;
person.FirstName := 'Homer';
person.LastName := 'Bologna';
person.Email := 'Homer@Bologna.com';

person.myArray[0] := true;
person.myArray[1] := false;
person.myArray[2] := true;

str := TJson.ObjectToJsonString(person);//Access Violation

最佳答案

您可以说服ObjectToJsonString来处理数组,但它们必须是具有类型信息的数组。您的数组使用内联类型,并且它们没有类型信息。

例如,声明字段fMyArray,如下所示:

type
TPerson = class(TObject)
private
type
TBooleanArray = array [0 .. 2] of Boolean;
private
FID: integer;
FLastName: string;
FFirstName: string;
FEmail: string;
fMyArray: TBooleanArray; // <-- this type has type info

function ReadArray(i: integer): Boolean;
procedure WriteArray(i: integer; val: Boolean);
public
property ID: integer read FID write FID;
property LastName: string read FLastName write FLastName;
property FirstName: string read FFirstName write FFirstName;
property Email: string read FEmail write FEmail;
property MyArray[i: integer]: Boolean read ReadArray write WriteArray;
end;

调用 ObjectToJsonString 会产生以下结果:

{"iD":0,"lastName":"","firstName":"","email":"","myArray":[false,false,false]}

Likewise, for dynamic arrays use

fMyArray: TArray<Boolean>;

而不是

fMyArray: array of Boolean;

出于完全相同的原因。

不过,您可能需要考虑使用不同的 JSON 库。 Embarcadero 提供的库没有最好的声誉。

关于delphi - 将带有数组的 delphi 对象转换为 json 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com