ASP.。NETWebAPI日期格式在JSON中没有成功序列化

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (87)

我们正在使用ASP.NETWebAPI,其中我们有一个基于REST的服务,它使用JSON作为有效负载。如果我将下列日期作为字符串传递

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

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

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

提问于
用户回答回答于

只需在web.config中设置globalization:

<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;
用户回答回答于

在ASP.NET WebAPI,可以添加不同的JSON。NET DateTime转换器通过JsonForMatter的SerializerSettings使您的服务理解不同的日期时间格式。

但是,我认为JSON没有默认的DateTime转换器。NET,采用这种格式“2011年12月31日00:00:00”。在本例中,您实现了自定义DateTime转换器。

WebApiConfig.cs:

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

自定义DateTime转换器:

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

有关如何编写自定义DateTime变换器的更多信息,我在堆栈溢出中找到了一些您可能认为有用的内容:如何创建用于字符串自定义转换器的json.net日期。

扫码关注云+社区

领取腾讯云代金券