【问题标题】:TJSON.JsonToObject do not pass through settersTJSON.JsonToObject 不通过设置器
【发布时间】:2019-09-24 14:25:44
【问题描述】:

在将 Json 字符串转换为我自己的对象时遇到了一些问题。我举个例子:

我的班级:

  TClasse = class
  private
    Fid: integer;
    Fnome: string;
    procedure Setid(const Value: integer);
    procedure SetNome(const Value: string);
  published
    property id : integer read Fid write Setid;
    property nome : string read Fnome write SetNome;
  end;

implementation

procedure TClasse.SetNome(const Value: string);
begin
  Fnome := Value;
  Fnome := 'testing: '+Fnome;
end;

我用那个方法:

  cl := TJSON.JsonToObject<TClasse>('{ "id" : 12, "nome" : "abc" }');

这意味着当方法“JsonToObject”被执行时,他将实例化我的类并将值设置为then,通过setter。属性“nome”应该具有值“testing:abc”,但它只有“abc”部分,来自 json。调试也不通过设置器。

我做错了吗?

【问题讨论】:

  • 是的,你做错了什么...使用#$%&??? Delphi 内置的 JSON 库从一开始就被破坏了......长话短说,它使用字段而不是属性进行序列化,现在我不知道是否可以调整它以使用 setter。
  • 在与 JSON 进行序列化时,您可能需要做的是使用定制的 POD 类型。

标签: rest oop delphi pascal setter


【解决方案1】:

您可以创建一个新类,例如TJSON_Respond 帮助序列化

TJSON_Respond= class
  public
    [JSONName('id')] id: Integer;
    [JSONName('nome')] nome: String;
  end;

cl := TJson.JSONToObject<TJSON_Respond>('{ "id" : 12, "nome" : "abc" }');

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多