У меня возникают проблемы с отображением правильной даты в клиентском браузере с использованием сериализованного объекта JSON. Пользователь может определить, в каком часовом поясе они хотят просматривать данные. Учитывая это, я конвертирую дату UTC в часовой пояс пользователя на сервере. Затем я хочу сериализовать дату/время (которые уже были преобразованы в определенный часовой пояс) в браузер через JSON.
Кажется простым, однако JSON-сериализаторы, которые я использовал, серьезно сократили мои даты. Сервер находится в UTC, а клиент находится в центре (-6). Даты корректируются (-12 часов), хотя я указываю DateTime.Kind на Unspecified.
Как-то .NET знает, в какой часовой зоне находится клиентский браузер, и в какой часовой зоне находится сервер, и он отрицает -6 из моих дат/времени, хотя я уже настроил время на глобальные настройки пользователя и установил тип даты не определен. Как я могу заставить сериализаторы JSON НЕ пытаться настроить мои даты?
List<ErrorGridModel> models = Mapper.Map<ErrorCollection, List<ErrorGridModel>>(errors);
foreach (ErrorGridModel m in models)
{
//convert UTC dates to user local dateTime - split out date vs. time for grouping & splitting columns
DateTime dtLocal = TimeZoneInfo.ConvertTimeFromUtc(m.ErrorDate, this.AppContext.User.TimeZoneInfo);
m.ErrorDate = new DateTime(dtLocal.Year, dtLocal.Month, dtLocal.Day, 0, 0, 0, DateTimeKind.Unspecified);
m.ErrorTime = new DateTime(1900, 1, 1, dtLocal.Hour, dtLocal.Minute, dtLocal.Second, DateTimeKind.Unspecified);
}
IQueryable<ErrorGridModel> dataSource = models.AsQueryable();
return new ContentResult() { Content = JsonConvert.SerializeObject(dataSource.ToDataSourceResult(request), new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat }), ContentType = "application/json" };
//return Json(dataSource.ToDataSourceResult(request));
Даты ISO работают, но я не могу их использовать, поскольку у меня есть сторонние элементы управления, которым нужен более ранний формат Microsoft... который настраивает часовые пояса на мне.