Einzelnen Beitrag anzeigen

Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#1

Generische Funktion mit RTTI aufrufen

  Alt 20. Mär 2018, 10:43
Delphi-Version: 10.2 Tokyo
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:
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;
Die Frage ist also, wass an die Stelle rein muss, oder ob es überhaupt möglich ist.

lListObj := JsonToObj<{????}>(itmval);
  Mit Zitat antworten Zitat