![]() |
Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
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:
Hat jemand eine Idee, wo ich hier ansetzen könnte.
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. Vielen Dank |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
"VJSONValue as TJSONObject" vorab in einer lokalen Variablen zuweisen und schauen ob es da "knallt" oder erst danach.
|
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
Die Zuweisung zu einer lokalen Variablen funktioniert noch, die Zugriffsverletzung kommt erst bei JsonToObject.
Kleiner Nachtrag: Der JSON-String aus dem Memofeld sieht folgendermaßen aus: [ { "_id":"lizenz-200001_M003", "_rev":"7-1efb9d247b31f0ae7f0333ee29fcb3da" }, { "_id":"lizenz-200001_M004", "_rev":"7-bedf20011f838cc5e7ef26902c1acb9f" }, { "_id":"lizenz-200001_M005", "_rev":"9-a4b2bb73ef02df15e43168551b42d4d4" } ] |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
Guten Morgen,
ich konnte das Problem noch etwas eingrenzen: Der Fehler kommt nur im Debug-Modus, wenn ich das Programm ohne Debugger starte läuft es perfekt. Weiterhin habe ich es mit einer älteren Delphi Version (28.0.42600.6491) getestet, auch da läuft das Programm noch fehlerfrei. Erst in der Version 28.0.44500.8973 kommt bei mir der Fehler. Vielleicht hat jemand ein ähnliches Problem bzw. kann mir hier einen Anhaltspunkt geben. Vielen Dank und viele Grüße |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
Weitere Ideen:
1. Du hast im Memo-Feld drei Einträge. Kommt das auch nur mit einem? 2. Debuggen. |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
zu 1.: die Anzahl der Einträge ist nicht relevant, ich habe das auch schon mit anderen JSON-Objekten versucht, das Problem ist immer das selbe
zu 2.: was meinst Du mit "Debuggen"? |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
Nun ja, Breakpoint setzen davor wo die Zugriffsverletzung kommt, dann hinsteppen mit F7 und schauen was da so passiert.
Und noch 3. minimales Beispielprojekt erstellen (ohne Form u.a.) |
AW: Zugriffsverletzung bei TJson.JsonToObject<T> mit Laufzeit-Packages
Hallo,
ich habe jetzt mal in den "sauren Apfel gebissen" und mich durch den Quelltext gewühlt. Dabei habe ich festgestellt, dass der Fehler nicht in TJson auftritt, sondern dass das Problem bei RTTI liegt. Ich würde den Thread hier mal schließen und das Problem in einem Neuen noch mal genau beschreiben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz