Delphi REST.JSON TJson.JsonToObject Проблема с наследованием - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы использовать библиотеку REST.JSON для преобразования объекта в JSON-строку и обратно, но я столкнулся с некоторыми проблемами.

Допустим, классы, которые я хотел бы преобразовать, - это "TFooChild1 "и" TFooChild2 ", которые оба происходят от" TFoo ".Классы выглядят так:

TFoo = class
protected
  Name: string;
  Value: Double;
end;

TFooChild1 = class(TFoo)
private
  Limit: Double;
end;

TFooChild2 = class(TFoo)
private
  Limit: Double;
  WorkerID: Integer;
end;

Создание и преобразование в JSON будет выглядеть примерно так:

var
  Foo: TFoo;
  s: string;
begin
  Foo := TFooChild1.Create;
  Foo.Name:= '...';
  ... //assign all the Fields
  s := TJson.ObjectToJsonString(Foo);
  Foo.Free;

  //conversion to string is correct...

  Foo := TJson.JsonToObject<TFoo>(s, []);
  //Field "Limit" is lost
end

Я знаю, что это (TJson.JsonToObject<TFoo>(s, [])) никогда не вернеттипа TFooChild1, но это именно то, что мне нужно.

При обратном преобразовании в объект поля дочерних классов теряются.Как мне избежать этого?Я не могу сделать JsonToObject<TFooChild1>, потому что я не знаю, будет ли это Child1 или Child2.Есть намеки?

Я погуглил, может быть, есть ConvertOption, который будет включать информацию о типе, но я ничего не нашел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...