Versuch doch mal so:
Delphi-Quellcode:
var
tmp: TTest;
begin
tmp := TTest.Create;
try
tmp.Test := "Wert2";
tmp.Test2 := 12;
memOutput.Lines.Text := TJson.ObjectToJsonString(tmp);
finally
tmp.Free;
end;
end;
Delphi-Quellcode:
var
tmp: TTest;
begin
tmp := TJson.JsonToObject<TTest>(memOutput.Lines.Text);
try
memOutput.Lines.Clear;
memOutput.Lines.Add(Format('tmp.Test: %s', [tmp.Test]));
memOutput.Lines.Add(Format('tmp.Test2: %d', [tmp.Test2]));
finally
tmp.Free;
end;
end;
Ja, "TJson.ObjectToJsonString" und "TJson.JsonToObject" funktionieren ja wie gesagt (vgl. Version 1, was auskommentiert ist).
Es geht ja darum zu schauen, ob TJsonSerializer nicht sinnvoll zum Laufen gebracht werden kann.
---
Wenn du der Klasse TTest
das Attribut [JsonSerialize(TJsonMemberSerialization.Public)]
voranstellst, sollte es gehen (zumindest in Delphi 12.3). Die Tatsache, dass das nicht ohne geht, zeigt noch erhebliche Mängel in der Implementierung. Vermutlich sollte man das besser noch eine Weile reifen lassen.
Dann würden nur die Public-Werte übernommen werden.
Delphi-Quellcode:
TTest4711 = class
private
FTest : String;
FTest2 : Integer;
FTest3 : Boolean;
public
constructor Create(const bTest3: Boolean); // FTest3 := bTest3;
function GetTest3() : Boolean; // Result := FTest3;
property Test : String read FTest write FTest;
property Test2 : Integer read FTest2 write FTest2;
end;
<- das würde dann nicht gehen. Bzw. er übernimmt die Private-Eigenschaft FTest3 nicht.
Liebe Grüße
Incocnito