Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
19. Jan 2022
TGate hat keinen parameterloses Constructor Create. Deshalb wird das TObject.Create verwendet (das gibt es immer) und somit ist FCameras nicht initialisiert.
Das intern verwendete TJSONUnmarshal erzeugt die Instanzen mit Hilfe der Funktion ObjectInstance. Dort steht als Bemerkung:
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
12. Nov 2021
Funktioniert doch tadellos.
type
TPerson = class
private
FName: String;
public
property Name: String read FName write FName;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
11. Nov 2021
Zwischen der Deklaration von JsonObjectListPersonAttribute und dessen Verwendung muss mindestens ein type stehen.
Steht auch so in der Readme:
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
11. Nov 2021
Hmm, kommt hier nicht - auch Delphi 11. Kannst du das komplette Projekt posten?
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
11. Nov 2021
Nein, das geht nicht. Man kann an eine (generische) Klasse kein generisches Attribut anhängen.
Ich habe das mal entsprechend erweitert und vereinfacht. Die neue Version findet man bei GitHub: https://github.com/UweRaabe/REST-JSon-Helpers
Bezogen auf dein Code-Beispiel und erweitert um die direkten Verarbeitung der Listen könnte das nun so aussehen:
type
TPerson = class
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
10. Nov 2021
Das ist ja auch genau der Hintergrund für die Interceptor-Klassen. Die wandeln nämlich die Listen in JSON-Arrays um und wieder zurück. Im wesentlichen tun TJson.JsonToObject und TJson.ObjectToJsonXXX ja auch nichts anderes als Marshal und CreateObject (Unmarshal gibt es nur in Data.DBXJSONReflect, die beißt sich aber mit REST.JsonReflect) für die jeweils erzeugten Hilfsklassen aufzurufen (halt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
10. Nov 2021
Ja, das ist richtig. Ein JSON String, der nur aus der Liste besteht, stellt halt eine TJSONArray dar und kein TJSONObject. TJson.JsonToObject arbeitet aber nur mit einem TJSONObject.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
10. Nov 2021
Ob das als Warnung oder Fehler kommt kannst du in den Projektoptionen unter Erzeugen - Delphi-Compiler - Hinweise und Warnungen - Ausgabewarnungen - Unbekanntes benutzerdefiniertes Attribut durch setzen des Werts auf True bzw. Fehler steuern.
Leider geht das aktuell nur projektweise.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
10. Nov 2021
Ich vermute mal, du bekommst beim Compilieren diese Meldung?
Dann fehlt in deiner Uses-Anweisung noch ein REST.Json.Types. Dort ist JSONOwned nämlich definiert.