我想使用REST.JSON Librairy将对象转换为JSON-String并返回,但是我遇到了一些问题。
比方说,我要转换的类是“ 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。
有什么提示吗?
我已经在Google上搜索了是否可能包含类型信息的ConvertOption,但是我什么都没找到
答案 0 :(得分:0)
将Rest.JsonReflect添加到您的uses类,因为您将需要使用附加到引用TFoo类的位置的[JsonReflect(ctObject,ctObject,TFooInterceptor)]
属性。然后,您将必须编写一个TFooInterceptor对象来拦截和处理适当的转换。我将对ObjectReverter
和ObjectConverter
覆盖进行编码,然后从那里开始编码。您的TFooInterceptor应该从TJSONInterceptor继承。 REST.Json.Interceptors.pas源代码中有一些示例。