Hallo in die Runde,
nach der Umstellung auf Delphi 11 habe ich das Problem, dass der Aufruf von TJson.JsonToObject<T> in meinem Projekt mit Laufzeit-Packages eine Zugriffsverletzung wirft. Wir das Programm ohne Laufzeit-Packages kompiliert läuft alles super. Das Problem trat erst nach der Umstellung auf Delphi 11 auf, mit 10.4 lief das ganze noch super. Zum besseren Verständnis hier noch mal der Quelltext:
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TLizenzDocument =
class
F_ID:
string;
F_Ref:
string;
public
property _ID:
string read F_ID
write F_ID;
property _Ref:
string read F_Ref
write F_Ref;
end;
TLizenzDocumentArray =
array of TLizenzDocument;
TForm1 =
class(TForm)
Memo1: TMemo;
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
function ConvertJsonToMobile5LizenzDocumentArray(AContent:
string): TLizenzDocumentArray;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
uses
System.Json,
Rest.Json,
REST.Json.Types;
{$R *.dfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
VLizenzen: TLizenzDocumentArray;
I: Integer;
begin
ListBox1.Items.Clear;
VLizenzen := ConvertJsonToMobile5LizenzDocumentArray(Memo1.Text);
for I := 0
to Length(VLizenzen) - 1
do
ListBox1.Items.Add(VLizenzen[I]._ID);
end;
function TForm1.ConvertJsonToMobile5LizenzDocumentArray(AContent:
string): TLizenzDocumentArray;
var
VJSONArray: TJSONArray;
VJSONValue: TJSONValue;
VJSONObject: TLizenzDocument;
begin
VJSONArray := TJSONObject.ParseJSONValue(AContent)
as TJSONArray;
Result := [];
for VJSONValue
in VJSONArray
do
begin
//--- hier wird die Zugriffsverletzung geworfen ---
VJSONObject := TJson.JsonToObject<TLizenzDocument>(VJSONValue
as TJSONObject);
Result := Result + [VJSONObject];
end;
end;
end.
Hat jemand eine Idee, wo ich hier ansetzen könnte.
Vielen Dank