【发布时间】:2016-10-11 14:46:31
【问题描述】:
尝试在运行时将对象转换为 JSON,但出现 RTTI 不足错误。 对象是:
{$M+}
{$TYPEINFO ON}
{$METHODINFO ON}
{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])}
TMyPacket = class(TObject)
Private
FID: TGUID;
FToIP: string;
FToPort: integer;
FSent: boolean;
FSentAt: TDateTime;
FAck: boolean;
FTimeOut: Cardinal;
FDataToSendSize: UINT64;
FDataToSend: AnsiString;
public
constructor create;
destructor free;
published
property ID: TGUID read FID write FID;
property ToIP: string read FToIP write FToIP;
property ToPort: integer read FToPort write FToPort;
property Sent: boolean read FSent write FSent;
property SentAt: TDateTime read FSentAt write FSentAt;
property Ack: boolean read FAck write FAck;
property TimeOut: Cardinal read FTimeOut write FTimeOut;
property DataToSend: AnsiString read FDataToSend write FDataToSend;
end;
后面的代码:
var fpacket: TMYPacket;
begin
fpacket := TVWTCPPacket.create;
//assign value to class properties
memo1.Lines.Text := TJson.ObjectToJsonString(fpacket); //throws error
并收到 JSON 转换错误。 有人知道 Delphi Berlin 10.1 出了什么问题吗? 我确实记得 XE2 上的一些 RTTI 问题,但不确定上面发生的事情是否与 Delphi 旧错误有关。
【问题讨论】:
-
正如 Stefan 和 Arnaud 在下面正确指出的那样,问题在于 GUID 直接序列化。但是,在类中更改字段类型对我的情况不起作用。所以我确实拦截了可以在下面找到的 GUID 转换器,它工作得很好。非常感谢你们。
标签: delphi rtti delphi-10.1-berlin