ASP.NET WebAPI XmlFormatter缺少日期的UTC偏移量

时间:2012-11-01 20:49:55

标签: asp.net xml xml-serialization asp.net-web-api timezone-offset

我有一个ASP.NET WebAPI实现,我允许客户端使用并请求HTTP响应的XML或JSON格式。一些响应对象包括日期/时间值。通过使用以下代码,我成功地获得了JSON响应以包含正确的ISO 8601格式化日期(包括UTC时间偏移):

Dim json As JsonMediaTypeFormatter = _
  GlobalConfiguration.Configuration.Formatters.JsonFormatter
json.SerializerSettings.DateFormatHandling = _
  Newtonsoft.Json.DateFormatHandling.IsoDateFormat
json.SerializerSettings.DateTimeZoneHandling = _
  Newtonsoft.Json.DateTimeZoneHandling.Local

JsonFormatter现在给我一个这样的日期:

2008-11-03T14:14:00-05:00

但是,XmlFormatter给了我一个日期:

2008-11-03T14:14:00

注意缺少的UTC时间偏移量(“-05:00”)。如何让XMLFormatter为我提供UTC时间偏移?

1 个答案:

答案 0 :(得分:1)

我相信我自己也想出了这个。

当从SQL Server数据库(使用IDataReader)和企业库数据块读取日期时,我需要使用Date.SpecifyKind方法来告知从数据库中检索的日期类型。

Dim dateCreated As Date = _
  Date.SpecifyKind(CDate(dbReader("DateCreated")), DateTimeKind.Local)

通过这样做,我还能够删除原始问题中指定的JsonMediaTypeFormatter行。所以,现在XML和JSON都将日期发送为:

2008-11-03T14:14:00-05:00

有关Date.SpecifyKind的更多信息,请访问: http://msdn.microsoft.com/en-us/library/bb546101.aspx