all,
我们使用的是ASP.NET Web API,其中我们与JSON提供了基于REST的服务进行有效载荷。如果我将以下日期作为字符串,例如
sampleObj: {
...
myDate: "31/12/2011 00:00:00",
...
}
作为JSON有效载荷中的属性值,日期属性被应为datetime.minvalue。字符串格式有效吗?
我们知道" 2012-10-17 07:45:00"的格式,成功序列化,但我们不能保证收到的所有日期都将采用这种格式。有效的选项是什么?
在ASP.NET Web API中,您可以通过JSONFormatter的SerializerSettings添加不同的JSON.NET DATETIMECONECONECONETERS,以使您的服务了解不同的DateTime格式。
但是,我认为json.net中没有默认的dateTimeConverter以这种格式" 31/12/2011 00:00:00"。在这种情况下,您可以实现自定义数据元素。
webapiconfig.cs:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter());
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new MyDateTimeConverter());
自定义数据频率:
public class MyDateTimeConverter : DateTimeConverterBase
{
//...
}
有关如何编写自定义datetimeconverter的更多信息,我在stackoverflow上发现了一些您可能会发现有用的信息:如何创建json.net日期到字符串自定义转换器。
只是在web.config中设置全球化:
<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>
然后,在global.asax.cs> application_start中,将jsonformatter设置为使用当前文化:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;