Я хотел бы использовать библиотеку 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, который будет включать информацию о типе, но я ничего не нашел