Mit Debug-
DCU kompiliert, siehst du schnell, dass es eigentlich in REST.Json.Helpers.TObjectListInterceptor<T>.Object sReverter knallt.
Wenn man sich die Zeile
list := TObjectList<T>(ctx.GetType(Data.ClassType).GetField(Field).GetValue(Data).AsObject);
zum Debuggen etwas aufdröselt, dann erhalten wir so ein Konstrukt:
Delphi-Quellcode:
procedure TObjectListInterceptor<T>.ObjectsReverter(Data: TObject; Field: string; Args: TListOfObjects);
var
ctx: TRTTIContext;
list: TObjectList<T>;
obj: TObject;
RttiType: TRttiType;
RttiField: TRttiField;
RttiValue: TValue;
ListObj: TObject;
begin
RttiType := ctx.GetType(Data.ClassType);
RttiField := RttiType.GetField(Field);
RttiValue := RttiField.GetValue(Data);
ListObj := RttiValue.AsObject;
list := TObjectList<T>(ListObj);
if list <> nil then
begin
list.Clear;
for obj in Args do
list.Add(T(obj));
end;
end;
Dadurch bekommst du zumindest die Information, dass der Cast von TValue.AsObject nach der TObjectList<T> (im konkreten Fall TIOList = TObjectList<TIODevice>) fehlschlägt und nil zurückliefert.
In
TValue.AsObject
sieht man, dass Result = nil ist, weil TValue.GetIsEmpty True zurückgibt.
Das liegt daran, weil FAsObject = nil ist.
Warum und Wieso entzieht sich meinen Verständnis. Beim füllen des TValue per
RttiField.GetValue(Data) und TValue.Make
bleibt die TValue.FValueData leer.