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