IsoDateTimeConverter appears to corrupt the date on serialization
Using the code: JsonSerializerSettings serializerSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat, DateParseHandling = DateParseHandling.DateTime, DateTimeZoneHandling = DateTimeZoneHandling.Utc, }; IsoDateTimeConverter converter = new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal, }; serializerSettings.Converters.Add(converter); string value = JsonConvert.SerializeObject(DateTime.Parse("2013-11-18T19:55:36.87"), serializerSettings);
Produces the value: "2013-11-19T00:55:36.87Z" My current timezone is UTC-5 which shows that it's actually converting the DateTime to UTC first rather than "AssumeUniversal"
I also ran into this. This code seems wrong: https://github.com/JamesNK/Newtonsoft.Json/blob/55a7204f9b9546aa07145591d42046d509176ad4/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs#L88
When used on a DateTime with a Kind of Unspecified, the ToUniversalTime() method assumes the time is a local time, which doesn't seem correct if DateTimeStyles.AssumeUniversal is set.