1

我正在处理我的主要项目,我必须“JSON 序列化”一个简单的类:


  TServer = class
  public
    Host: string;
  end;

  TServerList = class
  public
    Servers: TArray<TServer>;
  end;

procedure Test;
begin
  var SrvLst := TServerList.Create;
  SetLength(SrvLst.Servers, 1);
  SrvLst.Servers[0] :=  TServer.Create;
  SrvLst.Servers[0].Host := 'TEST';

  var Json := TJson.ObjectToJsonString(SrvLst);
  // >> Json = '{"servers":[{"host":"TEST"}]}' , it works...
  var SrvLst2 := TJson.JsonToObject<TServerList>(Json);
  // >> SrvLst2.Server is empty ?? what's wrong ??

  // memory leaks.. nevermind
end;

我看不出有什么问题……知道吗?谢谢你。

4

1 回答 1

0

您需要以这种方式声明类:

  TServer = class
  private
    FHost: string;
  public
    property Host: string read FHost write FHost;
  end;

  TServerList = class
  private
    FServers: TArray<TServer>;
  public
    property Servers: TArray<TServer> read FServers write FServers;
  end;

或者这样:

type
  TServer = class
  public
    [JSONName('Host')]
    Host: string;
  end;

  TServerList = class
  public
    [JSONName('Servers')]
    Servers: TArray<TServer>;
  end;

请注意,后者需要使用REST.Json.Types

于 2021-11-15T16:53:09.563 回答