Einzelnen Beitrag anzeigen

hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
62 Beiträge
 
Delphi 10.4 Sydney
 
#1

RTTI und generische Listen

  Alt 6. Nov 2020, 12:00
Hallo zusammen,

ich finde leider nach einigen Stunden des Herumprobierens die Lösung nicht und hoffe, Ihr könnt mir helfen:

Ich habe eine Klasse mit einer Generischen Liste als Property, etwa so:

Delphi-Quellcode:
TMainClass = class
privat
  Fmeinarray: TList<TSubClass>;
public
  property meinarray: TList<TSubClass> read Fmeinarray write Fmeinarray;
end;
Nun möchte ich die aus einem Json-Array das meinarray erzeugen. Ich habe also eine Json-Datei, die etwa so aussieht:

Code:
[
  {"classname": "TSubClass", "feld1": "hallo"},
  {"classname": "TSubClass", "feld1": "welt"}
]
Es hat jedes Objekt des Arrays immer die gleiche TSubClass. Da ich in der Umwandungsfunktion verschieden Objekte verarbeiten möchte, habe ich den classname dort im Objekt gespeichert und baue über RTTI das Objekt dynamisch auf. Damit das eine Liste werden kann, dachte ich, ich könnte folgendes machen:

function ConvertJsonToList(const Jsonstring: string): TList<TObject>;

und könnte dann die TList<TObject> dem obigen Feld meinarray zuweisen. Aber das geht nicht, da offensichtlich TList<TSubClass> nicht mit TList<TObject> zuweisungskompatibel ist. Ok, soweit hab ich es verstanden und es ist ja auch nicht unlogisch.

Aber wie kann ich dann das erreichen, was ich brauche? Wie kann ich meine TList<DynamischErzeugtesObjekt> einer TList<TSubClass> zuweisen? Klar, wenn ich beim Umwandeln schon wüsste, welchen Typ die Liste hat, könnte ich auch hier mit einer generischen Funktion arbeiten:

function ConvertJsonToList<T>(const Jsonstring: string): TList<T>;

Aber das T ziehe ich ja erst aus dem Json-Feld classname.

Hat jemand eine Idee, oder kann mir meine Gedanken in die richtige Richtung lenken.

Herzliche Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat