JSON中的ASP.NET Web API日期格式未成功序列化

所有,

我们正在使用ASP.NET Web API,我们有一个基于REST的服务,其中包含有效负载的JSON。 如果我将以下日期作为字符串传递,例如

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

作为JSON有效内容中的属性值,date属性被反序列化为DateTime.MinValue。 字符串格式有效吗?

我们知道格式“2012-10-17 07:45:00”成功序列化,但我们不能保证收到的所有日期都是这种格式。 有效的选择是什么?

在ASP.NET Web API中,您可以通过JsonFormatter的SerializerSettings添加不同的Json.NET DateTimeConverters,以使您的服务理解不同的DateTime格式。

但是,我认为Json.NET中没有默认的DateTimeConverter采用这种格式“31/12/2011 00:00:00”。 在这种情况下,您实现自定义DateTimeConverter。

WebApiConfig.cs:

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

自定义DateTimeConverter:

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

有关如何编写自定义DateTimeConverter的更多信息,我在stackoverflow上发现了一些您可能会觉得有用的东西: 如何创建一个json.net Date to String自定义Converter。

只需在web.config中设置全球化:

  

然后,在Global.asax.cs> Application_Start中,将JsonFormatter设置为使用当前文化:

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