AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erfahrungen mit TJsonSerializer

Ein Thema von Incocnito · begonnen am 7. Aug 2025 · letzter Beitrag vom 8. Aug 2025
 
Incocnito

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

Erfahrungen mit TJsonSerializer

  Alt 7. Aug 2025, 10:30
Moin Zusammen,

ich hatte von der KI bei einer Performance-Analyse mal den Tipp bekommen, dass ich statt REST.Json -> TJson.JsonToObject mal System.Json.Serializer -> TJsonSerializer.Create().Deserialize benutzen sollte. Was hatte ich mich gefreut, dass das so viel schneller lief. Hatte bei meiner Freude völlig übersehen, dass einfach gar keine Werte in das Objekt übernommen wurden.

Ich hatte also ein Test-Projekt angelegt und das mal auf ein minimales Beispiel runter gebrochen.

Delphi-Quellcode:
unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TTest = class
  private
    FTest : String;
    FTest2 : Integer;
  public
    property Test : String read FTest write FTest;
    property Test2 : Integer read FTest2 write FTest2;
  end;

type
  TfrmMain = class(TForm)
    pnlIn: TPanel;
    spTrenner: TSplitter;
    pnlOut: TPanel;
    lblInput: TLabel;
    memInput: TMemo;
    btnStart: TButton;
    lblOutput: TLabel;
    memOutput: TMemo;
    btnClose: TButton;
    procedure btnCloseClick(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;

implementation

uses
  System.JSON.Serializers,
  Rest.Json;

{$R *.dfm}

procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
  Close();
end;

procedure TfrmMain.btnStartClick(Sender: TObject);
var
  tmp : TTest;
  js : TJsonSerializer;
begin
  // V1:
  {
  tmp := TJson.JsonToObject<TTest>(memInput.Lines.Text);
  try
    memOutput.Lines.Text := TJson.ObjectToJsonString(tmp);
  except
    memOutput.Lines.Text := '';
  end;
  }


  // V2:
  js := TJsonSerializer.Create();
  try
    tmp := js.Deserialize<TTest>(memInput.Lines.Text);
    try
      try
        memOutput.Lines.Text := TJson.ObjectToJsonString(tmp);
      except
        on E: Exception do
          memOutput.Lines.Text := 'Fehler: ' + E.Message;
      end;
    finally
      tmp.Free();
    end;
  finally
    js.Free();
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  memInput.Lines.Text := '{"Test":"Wert1","Test2":12}';
end;

end.
Version 1 mit TJson.JsonToObject funktioniert wunderbar.
Version 2 mit js.Deserialize funktioniert nicht.

Die KI kam darauf mit lustigen Tipps, dass ich statt "public" doch "published" verweden soll,
oder alle Private-Eigenschaften mit "[JsonIn]" als Attribut erweitern sollte,
aber guess what, hat natürlich nicht funktioniert.

Wir verwenden Delphi 11.

Hat da jemand eine Lösung für?

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 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