ich beschäftige mich aktuell mit Serialisierung von Objekten mit JSON. Ich habe folgendes Objekt, das weitere Unterebenen der selben Objektklasse enthalten kann, die in einer TObjectList enthalten sind. In diesem Fall können die Unterobjekte in Items bzw. FItems gespeichert werden.
Code: Alles auswählen
TMyObject = class(TPersistent)
private
FTestProp1: String;
FTestProp2: Integer;
FName: WideString;
FItems: TObjectList;
public
constructor Create;
destructor Destroy; override;
published
property Items: TObjectList read FItems write FItems;
property Name: WideString read fName write fName;
property TestProp1: String read FTestProp1 write FTestProp1;
property TestProp2: Integer read FTestProp2 write FTestProp2;
end;
Code: Alles auswählen
uses fpjsonrtti, Contnrs;
procedure TForm1.Button1Click(Sender: TObject);
var
MyObject1: TMyObject;
MyObject1_1: TMyObject;
MyObject1_2: TMyObject;
MyObject1_1_1: TMyObject;
jsoSerialize: TJSONStreamer;
ts: TStringStream;
s: String;
begin
MyObject1 := TMyObject.Create;
MyObject1_1 := TMyObject.Create;
MyObject1_2 := TMyObject.Create;
MyObject1_1_1 := TMyObject.Create;
jsoSerialize := TJSONStreamer.Create(nil);
try
MyObject1.Name := 'Max';
MyObject1.TestProp1 := 'Ebene 1';
MyObject1.TestProp2 := 1;
MyObject1_1.Name := 'Moritz';
MyObject1_1.TestProp1 := 'Ebene 1_1';
MyObject1_1.TestProp2 := 11;
MyObject1.Items.Add(MyObject1_1);
MyObject1_2.Name := 'Hans';
MyObject1_2.TestProp1 := 'Ebene 1_2';
MyObject1_2.TestProp2 := 12;
MyObject1.Items.Add(MyObject1_2);
MyObject1_1_1.Name := 'Peter';
MyObject1_1_1.TestProp1 := 'Ebene 1_1_1';
MyObject1_1_1.TestProp2 := 111;
MyObject1_1.Items.Add(MyObject1_1_1);
s := jsoSerialize.ObjectToJSONString(MyObject1);
ts := TStringStream.Create(s);
try
ts.SaveToFile('Test.json');
finally
ts.Free;
end;
Memo1.Lines.Text := s;
finally
jsoSerialize.Free;
MyObject1.Free;
end;
end;
Code: Alles auswählen
procedure TForm1.Button2Click(Sender: TObject);
var
MyObject: TMyObject;
jsoDeSerialize: TJSONDeStreamer;
ts: TStringStream;
s: String;
i: Integer;
begin
ts := TStringStream.Create;
MyObject := TMyObject.Create;
jsoDeSerialize := TJSONDeStreamer.Create(nil);
try
ts.LoadFromFile('Test.json');
s := ts.DataString;
jsoDeSerialize.JSONToObject(s, MyObject);
WriteToMemo(MyObject);
finally
jsoDeSerialize.Free;
MyObject.Free;
ts.Free;
end;
end;
Hat einer eine Idee? Habe mal das komplette Projekt angehängt.
lg,
jus