2012-10-17 14 views
18

Wszystko,ASP.NET Web API Format daty w JSON nie serialise powodzeniem

Jesteśmy przy użyciu ASP.NET Web API gdzie mamy usługę opartą spoczywać JSON dla ładunku. Jeśli mijam podanej dacie jako ciąg np

sampleObj: { 
... 
myDate: "31/12/2011 00:00:00", 
... 
} 

jako wartość atrybutu w bloku danych JSON, atrybut data zostanie deserialised w DateTime.MinValue. Czy format ciągu jest prawidłowy?

Wiemy, że format "2012-10-17 07:45:00" pomyślnie się serializuje, ale nie możemy zagwarantować, że wszystkie otrzymane daty będą miały ten format. Jakie są prawidłowe opcje?

Odpowiedz

46

W ASP.NET Web API można dodawać różne Json.NET DateTimeConverters za pośrednictwem SerializerSettings JsonFormatter, aby usługa zrozumiała inny format DateTime.

Jednak nie sądzę, że istnieje domyślny DateTimeConverter z Json.NET, który przyjmuje ten format "31/12/2011 00:00:00". W takim przypadku zaimplementujesz niestandardowy program DateTimeConverter.

WebApiConfig.cs:

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
      new IsoDateTimeConverter()); 
     config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
      new MyDateTimeConverter()); 

klienta DateTimeConverter:

public class MyDateTimeConverter : DateTimeConverterBase 
{ 
    //... 
} 

Aby uzyskać więcej informacji o tym, jak napisać własny DateTimeConverter, znalazłem coś na stackoverflow, które mogą okazać się przydatne: How to create a json.net Date to String custom Converter.

+0

Dzięki za tą pomoc. Nie będziemy tworzyć niestandardowego konwertera czasu, chciałem tylko potwierdzić, że format nie był domyślnie akceptowany przez Json.NET. – bstack

+1

U zaoszczędziłem mój czas. dzięki –

3

Po prostu ustaw globalizację w pliku web.config:

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/> 

a następnie w Global.asax.cs> Application_Start ustaw JsonFormatter do wykorzystania obecnej kultury:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;