delphi rest.json tjson.jsontoobject问题与继承有关



我想使用其余的库将对象转换为json-string和back,但是我遇到了一些问题。

假设我想转换的类是" tfoochild1"one_answers" 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。有提示吗?

我已经搜索了可能包含类型信息的转换,但我还没有找到任何东西

将REST.jsonRect.jsonreflect添加到您的使用类中,因为您需要使用附加的[JsonReflect(ctObject,ctObject,TFooInterceptor)]属性附加到您引用TFOO类的位置。然后,您将必须编码tfoointerceptor对象才能拦截和处理适当的转换。我将编码ObjectReverterObjectConverter覆盖并从那里开始编码。您的tfoointerceptor应该从tjsoninterceptor降下。一些示例在源rest.json.interceptors.pas。

最新更新