![]() |
Delphi-Version: 10.2 Tokyo
Generische Funktion mit RTTI aufrufen
Hallo zusammen,
ich versuche mich gerade an einer JsonToObject Funktion. Ich hänge aber aktuell an der Stelle, dass ich mehrere TObjectList<T> Instanzen in den Klassen habe. Ich versuche mal es zusammenzufassen:
Delphi-Quellcode:
Die Frage ist also, wass an die Stelle rein muss, oder ob es überhaupt möglich ist.
class function TJsonRttiHelper.JsonToObj<T>(AJson: ISuperObject): T;
// ... begin // .. // prüfung ob es sich um eine generische liste handelt.. if IsGenericList(myprop.GetValue(lObj).AsObject.ClassType) then begin // instanz der TObjectList<T>, lList : TObject; lList := myprop.GetValue(lObj).AsObject; // Add methode der TObjectList<T> um sie später aufzurufen proptype := c.GetType(lList.ClassInfo) as TRttiInstanceType; meth := proptype.GetMethod('Add'); // GetGenericDataTypeName gibt den FQ-Namen des "T" zurück. Also z.B. "MeineDatenunit.TMeinDatentyp" //lListObj := (c.FindType(GetGenericDataTypeName(myprop.GetValue(lObj).AsObject.ClassType)) as TRttiInstanceType).MetaClassType.Create; // Hier liegt das Problem. Ich versuche die funktion hier rekursiv aufzurufen, weiß aber nicht genau wie ich "TMeinDatentyp" an die Funktion übergeben kann. //lListObj := JsonToObj<(c.FindType(GetGenericDataTypeName(myprop.GetValue(lObj).AsObject.ClassType)) as TRttiInstanceType).ClassParent>(itmval); lListObj := JsonToObj<{HILFE, was muss hier rein? :(}>(itmval); // aufruf der methode.. meth.Invoke(lList, [lListObj]); end; end;
Delphi-Quellcode:
lListObj := JsonToObj<{????}>(itmval);
|
AW: Generische Funktion mit RTTI aufrufen
Nein, das geht nicht.
Du müsstest den Code aus TJson.JsonToObject<T> nehmen und in in eine nicht generische Methode verpacken - das geht hier recht einfach, weil JsonToObject nicht noch weiter generischen Code aufruft, sondern T bloß als TClass weiter an CreateObject gibt. P.S. Ich bin hier von System.REST.Json ausgegangen, wie das mit SuperObject aussieht weiß ich nicht, wird aber ähnlich sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz