2012-08-03 19 views
9

Nie jestem pewien, czy to mnie brakuje czegoś - lub IE lub Json.Net.Internet Explorer, Json.Net JavaScript data i milliseconds numer

Ale w zasadzie to działa:

new Date("2012-08-03T12:36:54.743Z")

ten nie powiedzie się z 'Nieprawidłowa data' błąd:

new Date("2012-08-03T12:36:54.74Z")

Drugi termin jest przechowywany w SQL Server jako:

2012-08-03 12:36:54.740

Następnie szeregowane jako JSON za pomocą Json.NET - Json.Net nie odcinkach datę jako 2012-08-03T12:36:54.74Z, skutecznie odcinając ostatni 0.

Moje pytanie (s):

  • Czy to jest przeznaczone zachowanie w IE - że musi mieć wszystkie 3 cyfry w ciągu milisekund do pracy?
  • Czy jest to zamierzone zachowanie w Json.Net - że zawsze odetnie ostatnie 0 w dacie?

Odpowiedz

11

Nie mogę powiedzieć, czy jest to zamierzone, czy nie, ale wiele szukałem i nie znalazłem ani jednego realnego rozwiązania dla tego problemu. Wygląda na to, że musimy zaakceptować fakt, że IE akceptuje dokładnie trzy cyfry. Jedynym sposobem (dla mnie), aby obejść ten problem jest użycie niestandardowego konwerter Json.NET podczas szeregowania:

string json = JsonConvert.SerializeObject(
    whatEver, 
    new IsoDateTimeConverter 
     { 
      DateTimeFormat = "yyyy-MM-dd\\THH:mm:ss.fffK" 
     } 
    ); 

(tylko przetestowane z Json.NET 4.0.8 i 4.5.8)

To zmusza Json.NET do użycia dokładnie 3 miejsc po przecinku.

O ile mogę stwierdzić, Json.NET serializuje wartości DateTime w formacie ISO z maksymalną niezbędną precyzją, pomijając końcowe zera w miejscach dziesiętnych "drugiej" wartości.

Dopasowuje wyjście

someDateTimeValue.ToString("yyyy-MM-dd\\THH:mm:ss.FFFFFFFK") 
  • Normalny DateTime jak DateTime.UtcNow będzie serializowane maksymalnie 7 znaków, ponieważ jest to precyzja DateTime (pomiar kleszczy).
  • Jeśli "druga" część DateTime ma mniejszą liczbę miejsc dziesiętnych, Json.NET pomija te końcowe zera.
  • Wartość daty, taka jak DateTime.Today, będzie zawierać cyfry no za "drugą" wartością, ponieważ jest to dokładnie 0.

See also this description of custom date and time format strings.

+0

Mam ten sam problem przy użyciu nowego ASP.NET Web API. Czy znasz sposób, aby skonfigurować JSON.Net raz tak, że odbywa się to w całej aplikacji? – Julius

+8

Możesz określić 'IsoDateTimeConverter' jako domyślny w twoim' GlobalConfiguration'. Otwórz plik "Global.asax.cs" i dodaj coś takiego: 'GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new IsoDateTimeConverter {DateTimeFormat =" rrrr-MM-dd \\ THH: mm: ss. fffK "});' – fero

+0

Doskonale, właśnie tego szukałem :) – Julius

Powiązane problemy