Einzelnen Beitrag anzeigen

Incocnito

Registriert seit: 28. Nov 2016
237 Beiträge
 
#4

AW: Erfahrungen mit TJsonSerializer

  Alt 7. Aug 2025, 14:00
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
  Mit Zitat antworten Zitat