Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi deserialize JSON und TDateTime

  Alt 31. Mär 2020, 08:07
Da kann man allerdings was machen, wenn man ein passendes JsonReflectAttribute und einen TJSONInterceptor dafür schreibt.
Delphi-Quellcode:
interface

uses
  REST.JsonReflect;

type
  JsonMyDateAttribute = class(JsonReflectAttribute)
  public
    constructor Create;
  end;

implementation

uses
  System.Rtti, System.SysUtils;

type
  TMyDateTimeInterceptor = class(TJSONInterceptor)
  protected
    procedure StringReverter(Data: TObject; Field, Arg: string); override;
  end;

procedure TMyDateTimeInterceptor.StringReverter(Data: TObject; Field, Arg: string);
var
  ctx: TRTTIContext;
  datetime: TDateTime;
begin
  datetime := StrToDateTime(Arg);
  ctx.GetType(Data.ClassType).GetField(Field).SetValue(Data, datetime);
end;

constructor JsonMyDateAttribute.Create;
begin
  inherited Create(ctObject, rtString, TMyDateTimeInterceptor);
end;
Unter der Annahme, daß deine Klasse in etwa so aussieht, musst du das entsprechende Feld mit dem Attribut dekorieren.
Delphi-Quellcode:
type
  TMyObject = class
  private
    FFertigbis: string;
    FAnzahl: Integer;
    FNummer: Integer;
    [JsonMyDate]
    FAenderung: TDateTime;
  public
    constructor Create;
  end;
Eine ganz ähnliche Technik wird auch in diesem Artikel beschrieben: Serializing Objects with TJson
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat