Du machst es dir viel zu kompliziert - Das ist alles schon fertig: Mit TJson.JsonToObject<TErrorMessage>(yourJsonObject) hast du eine automatische Umwandlung deines Json-Objekts in TErrorMessage.
Hier als Beispiel:
Delphi-Quellcode:
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
// JCL_DEBUG_EXPERT_DELETEMAPFILE OFF
program Project19;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.IoUtils,
System.Json,
Rest.Json,
Unit10 in 'Unit10.pas';
const
filePath = 'y:\jsonTest.txt';
procedure parseJson();
var
fileContent: String;
messagesJson: TJSONArray;
messageJson: TJSONValue;
messageObject: TErrorMessage;
messagesObjects: TArray<TErrorMessage>;
begin
fileContent := TFile.ReadAllText(filePath);
messagesJson := TJSONObject.ParseJSONValue(fileContent) as TJSONArray;
messagesObjects := [];
for messageJson in messagesJson do begin
messageObject := TJson.JsonToObject<TErrorMessage>(messageJson as TJsonObject);
messagesObjects := messagesObjects + [messageObject];
end;
readln;
end;
begin
parseJson();
end.
PS: Ja, die Umwandlung stammt aus Rest.Json.pas die beim
RAD-Studio dabei ist. Ich wundere mich auch, was das mit REST zu tun haben soll, warum das nicht auch in System.Json.pas steckt. Aber das ist hoffentlich kein Stolperstrick?