I am creating a web API and am having problems serializing JSON DateTimes. After performing some tests, I can only conclude that the behavior Newtonsoft.Json.JsonConvertand / or Newtonsoft is IsoDateTimeConverternot what I expected.
Consider this:
var noonUtc = new DateTime(2016, 05, 12, 12, 0, 0, DateTimeKind.Utc);
var noon = new DateTime(2016, 05, 12, 12, 0, 0, DateTimeKind.Unspecified);
var settings = new JsonSerializerSettings();
settings.Converters.Add(new IsoDateTimeConverter
{
Culture = CultureInfo.InvariantCulture,
DateTimeStyles = DateTimeStyles.AdjustToUniversal
});
var utcJson = JsonConvert.SerializeObject(noonUtc, settings);
var json = JsonConvert.SerializeObject(noon, settings);
...
Well, therefore, the time for DateTimes DateTimeKind.Unspecifiedwas adjusted from 12 hours to 10 hours. I am in Stockholm, which is now two hours ahead of UTC, so fair.
However, change the serializer settings to use DateTimeStyles.AssumeUniversal, for example:
settings.Converters.Add(new IsoDateTimeConverter
{
Culture = CultureInfo.InvariantCulture,
DateTimeStyles = DateTimeStyles.AssumeUniversal
});
, , DateTime DateTimeKind.Unspecified ! , UTC ? ?