我想使用其余的库将对象转换为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对象才能拦截和处理适当的转换。我将编码ObjectReverter
和ObjectConverter
覆盖并从那里开始编码。您的tfoointerceptor应该从tjsoninterceptor降下。一些示例在源rest.json.interceptors.pas。