2012-10-17 9 views
18

Alle,ASP.NET Web API Datumsformat in JSON Serialisierung nicht erfolgreich

Wir verwenden ASP.NET Web API, wo wir einen REST-basierten Dienst mit JSON für die Nutzlast haben. Wenn ich folgendes Datum als Zeichenfolge beispiels

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

als Attributwert in der JSON-Nutzlast übergeben, wird das Datumsattribut in eine DateTime.MinValue deserialised. Ist das Zeichenfolgenformat gültig?

Wir wissen, dass das Format "2012-10-17 07:45:00" erfolgreich serialisiert, aber wir können nicht garantieren, dass alle empfangenen Daten in diesem Format vorliegen. Was sind die gültigen Optionen?

Antwort

46

In der ASP.NET-Web-API können Sie verschiedene Json.NET DateTimeConverter über die SerializerSettings von JsonFormatter hinzufügen, damit Ihr Dienst das unterschiedliche DateTime-Format versteht.

Allerdings glaube ich nicht, dass es einen Standard DateTimeConverter von Json.NET gibt, der dieses Format "31/12/2011 00:00:00" annimmt. In diesem Fall implementieren Sie Ihren benutzerdefinierten DateTimeConverter.

WebApiConfig.cs:

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

Benutzerdefinierte Datetimeconverter:

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

Weitere Informationen darüber, wie eine benutzerdefinierte Datetimeconverter zu schreiben, fand ich etwas auf Stackoverflow, die Ihnen nützlich sein könnten: How to create a json.net Date to String custom Converter.

+0

Vielen Dank für die Hilfe. Wir werden keinen benutzerdefinierten Datum/Uhrzeit-Konverter erstellen. Ich wollte nur bestätigen, dass das Format von Json.NET standardmäßig nicht akzeptiert wurde. – bstack

+1

U hat meine Zeit gerettet. Vielen Dank –

3

Setzen Sie die Globalisierung in web.config:

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

und dann in Global.asax.cs> Application_Start, setzen JsonFormatter die aktuelle Kultur zu nutzen:

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