ASP.NET WebAPI XmlFormatter отсутствует смещение UTC для дат

У меня есть реализация ASP.NET WebAPI, которую я разрешаю клиентам использовать и запрашивать форматирование XML или JSON ответа HTTP. Некоторые из объектов ответа содержат значения даты/времени. Мне удалось получить ответ 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?


person Procedure    schedule 01.11.2012    source источник


Ответы (1)


Я считаю, что я только что понял это сам.

При чтении дат из базы данных SQL Server (с помощью IDataReader) и блока данных Enterprise Library мне нужно использовать метод 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

person Procedure    schedule 02.11.2012