Hallo zusammen,
ich hab mit Hilfe des Beitrags von Uwe Raabe probiert eine Objectlist zu de/serialisieren.
Serialisieren klappt aber deserialisieren klappt nicht.
Im TObjectListInterceptor<T>.ObjectsReverter knallt es immer mit einer Zugriffsverletzung.
Kann mir jemand sagen was ich da falsch mache?
List ist immer nil, ich hätte gedacht mit JSONOwned(False) umgeht man das.
https://www.uweraabe.de/Blog/2020/03...ts-with-tjson/
Delphi-Quellcode:
TPerson = class
private
FName: String;
public
property Name: String read FName write FName;
end;
TPersonListe = TObjectList<TPerson>;
TPersonListeInterceptor = TObjectListInterceptor<TPerson>;
type
TPersonJSON = class
private
[JSONOwned(False), JsonObjectList(TPersonListeInterceptor)]
FPersonListe: TPersonListe;
public
constructor Create;
destructor Destroy; override;
property PersonListe : TPersonListe read FPersonListe write FPersonListe;
end;
var
Form78: TForm78;
implementation
{$R *.dfm}
procedure TForm78.Button1Click(Sender: TObject);
const
cNamen: TArray<String> = [ 'Name1', 'Name2', 'Name3'];
var
lPersonJSON : TPersonJSON;
lPerson : TPerson;
lReverseTest: TPersonJSON;
lJSONString: String;
begin
lPersonJSON := TPersonJSON.Create;
try
for var lName in cNamen do
begin
lPerson := TPerson.Create;
lPerson.Name := lName;
lPersonJSON.PersonListe.Add( lPerson);
end;
lJSONString := TJson.ObjectToJsonString( lPersonJSON);
finally
lPersonJSON.Free;
end;
// !! Hier krieg ich eine Zugriffsverletzung
lReverseTest := TJson.JsonToObject<TPersonJSON>( lJSONString);
end;
{ TPersonJSON }
constructor TPersonJSON.Create;
begin
inherited;
FPersonListe := TPersonListe.Create( True);
end;
destructor TPersonJSON.Destroy;
begin
FreeAndNil( FPersonListe);
inherited;
end;