Hallo,
bei Versuch einen Serializer zu schreiben, bleibe ich gerade bei den Interfaces stecken.
Der Serializer ist eine rekursive Funktion die ein TValue entgegen nimmt.
Übernommen aus diesem Thread:
https://stackoverflow.com/questions/...14088#11514088
Allerding ist der Interface Teil in dem sonst gut funktionierenden Beispiel leer.
Das habe ich folgend ergänzt. Es wird über alle Methoden die das Interface definiert iteriert und wenn eine Methode einen Rückgabewert <> nil (also Funktion) hat und keine Parameter erwartet, wird versucht die rekursive Funktion erneut aufzurufen mit dem Rückgabewert der aufzurufenden Funktion:
Code:
tkInterface: // Identifies an interface type.
begin
sList.Add(FSumIndent + 'interface ' + name + ':' + thing.TypeInfo.name);
IncIndent();
for LMethod in LContext.GetType(thing.TypeInfo).GetMethods do
begin
if (LMethod.ReturnType <> nil) and (length(LMethod.GetParameters) = 0) then
Serialize(LMethod.name, LMethod.Invoke(thing, []), sList); //<--
AV
end;
DecIndent();
sList.Add(FSumIndent + 'end');
end;
Dass ich hier bei "LMethod.Invoke(thing,.." eine
AV bekomme ist nicht weiter verwunderlich, denn ich übergebe statt einer Instanz nur ein Interface.
Aber die Frage ist wie komme ich an das Objekt ran, dass hinter dem Interface steckt?