AGB  ·  Datenschutz  ·  Impressum  







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

TDate im Json

Ein Thema von Incocnito · begonnen am 13. Okt 2021 · letzter Beitrag vom 14. Okt 2021
 
Incocnito

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

TDate im Json

  Alt 13. Okt 2021, 15:16
Hi Zusammen,

ich habe eine Klasse, die ein TDate enthällt, was
durch TJSON.ObjectToJsonString(obj)
irgendwann mal als '{"Wert":44298}' konvertiert wurde.
Jetzt bekomme ich bei "TJSON.JsonToObject<>()" aber die
Fehlermeldung, dass "44298" ein ungültiger Datums-String ist.

Ich hatte mich schon an einem Json-Attribute versucht, aber
ich verstehe überhaubt nicht, was da passiert.

Offensichtlich hilft das hier nicht weiter:

Delphi-Quellcode:

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

type
  TMyDateInterceptor = class(TJSONInterceptor)
  public
    function StringConverter(Data : TObject; Field : String) : String; override;
    procedure StringReverter(Data : TObject; Field : String; Arg : String); override;
  end;
...

{ JsonMyDateAttribute }

constructor JsonMyDateAttribute.Create();
begin
  inherited Create(ctObject, rtString, TMyDateInterceptor);
end;

{ TMyDateInterceptor }

function TMyDateInterceptor.StringConverter(Data : TObject; Field : String) : String;
var
  ctx : TRTTIContext;
  sValue : String;
begin
  sValue := ctx.GetType(Data.ClassType).GetField(Field).GetValue(Data).AsType<String>;
  Result := DateToISO8601(StrToFloatDef(sValue, 0));
end;

procedure TMyDateInterceptor.StringReverter(Data : TObject; Field : String; Arg : String);
var
  ctx : TRTTIContext;
  dtVal : TDate;
begin
  dtVal := StrToFloatDef(Arg, 0);
  ctx.GetType(Data.ClassType).GetField(Field).SetValue(Data, dtVal);
end;
Weiter bin ich mit Google nicht gekommen und ich verstehe auch nicht wirklich, was da passiert.
Er läuft da beim Aufruf von JsonToObject zwar rein und in dtVal steht dann auch ein brauchbares Datum,
aber letztlich kommt der gleiche Fehler.
Nebenbei wüsste ich als auch gerne, was denn die korrekte Speicherart von TDate sein soll.
An anderer Stelle (einem FMX-Programm) kann ich ein Array of TDate aber problemlos auslesen,
wenn die Werte als Integer im Json-String "gespeichert" sind.

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 05:56 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