AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TJSONMarshal / TJSONUnMarshal böse Falle

Ein Thema von Rollo62 · begonnen am 1. Okt 2017 · letzter Beitrag vom 3. Okt 2017
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: TJSONMarshal / TJSONUnMarshal böse Falle

  Alt 2. Okt 2017, 22:58
Ich bin mir nicht sicher, ob die Erklärung nicht irreführend ist.

FDateTimeIsUTC := true; war der ursprüngliche Code (siehe Berlin in meinem Post) und hat implizit dafür gesorgt, daß TJSONMarshal/TJSONUnMarshal mit derselben Einstellung arbeiteten und das korrekte Ergebnis brachten. Allerdings wurde die jeweilige Einstellung von DateTimeIsUTC gar nicht ausgewertet (der Create-Parameter wurde ja ignoriert).

In Tokyo ist das geändert worden (siehe Tokyo in meinem Post) und es wird der übergebene Parameter verwendet, was auch vollkommen richtig ist. Das bedeutet aber, daß in TJSONMarshal/TJSONUnMarshal jeweils diese Werte auch passend gesetzt werden müssen (also beide True oder beide False). Das ist ja auch die Beobachtung, die du bereits im Eingangspost gemacht hast.

Der Fehler ist also nicht das FDateTimeIsUTC := ADateTimeIsUTC im TISODateTimeInterceptor.Create (was ja nur das falsche Verhalten korrigiert), sondern die fehlende Initialisierung von DateTimeIsUTC := true im TJSONMarshal.Create , um mit TJSONUnMarshal synchron zu sein.

Vermutlich sollte diese Initialisierung auch nicht in TJSONMarshal.Create gemacht werden, sondern in TTypeMarshaller<TSerial>.Create , wo das DateTimeIsUTC ja bereits deklariert wird. Gleichzeitig sollte das DateFormat auch dort initialisiert werden, und zwar ebenfalls synchron zu der Initialisierung in TJSONUnMarshal.

Noch besser wäre es sogar, wenn man sowohl DateFormat als auch DateTimeIsUTC bereits in der Basisklasse TMarshalUnmarshalBase deklariert und initialisiert. Dann würde das Problem gar nicht auftauchen.

Ich habe mir mal erlaubt, den Text entsprechend anzupassen und auch einen Verweis auf den QP-Eintrag zu ergänzen, der dem Fix zugrunde liegt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.065 Beiträge
 
Delphi 12 Athens
 
#12

AW: TJSONMarshal / TJSONUnMarshal böse Falle

  Alt 3. Okt 2017, 08:11
Ok, sorry.
Hatte ich genau andersrum gelesen Berlin <-> Tokyo.
Sollte Emba aber so oder so klar sein.

Rollo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz