[C#] JavaScriptSerializer und DateTime

RudolfG

Erfahrenes Mitglied
Hi Leute,

ich schreibe gerade eine Client/Server Anwendung, die Kommunikation läuft Diffie-Hellmann verschlüsselt und die Objekte werden mit dem JavaScriptSerializer als JSON serialisiert.

Das funktioniert bei Int32 und string sehr gut, das mit dem DateTime schien zu funktionieren, bis ich etwas genauer hinguckte.

Bei jeder Serialisierung nach JSON und anschließender Deserialisierung wieder nach DateTime ist das Datum immer -1 (von dem wie ich es Serialisiert habe).

Gebe 05.05.2010 ein, kommt nach dem Serialisieren und Deserialisieren 04.05.2010 raus...


Dies kann man auch durch das kurze folgende Beispiel nachvollziehen:

C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;

namespace DateTimeJSON
{
   class Program
   {
      static void Main(string[] args)
      {
         JavaScriptSerializer s = new JavaScriptSerializer();
         DateTime t = new DateTime(2010, 5, 5);

         string str = s.Serialize(t);

         DateTime t2;

         t2 = s.Deserialize<DateTime>(str); // In t2 steht jetzt 04.05.2010
      }
   }
}

Ich werde mich über Hilfe freuen.

\edit:

In DateTime vorher steht 05.05.2010 00:00:00 und nach dem Serialisieren 04.05.2010 22:00:00 als ob er da irgendwelche Zeitzonen oder so reinrechnet....
 
Zuletzt bearbeitet:

Nico Graichen

Erfahrenes Mitglied
Hi

In der Serialisierung ist keine Information des Offsets enthalten. Demnach wird beim Deserialisieren davon ausgegangen, dass das angegebene Datum Utc ist (siehe Property Kind).
Wenn du die Methode ToLocalTime() ausrufst kriegst du wieder deinen Ausgangswert (da in der gleichen Zeitzone / gleicher Offset)