我正在构建一个Web API,并且对的JSON序列化遇到了麻烦DateTimes。经过一些测试之后,我只能得出结论,Newtonsoft.Json.JsonConvert和/或Newtonsoft 的行为IsoDateTimeConverter不是我所期望的。
考虑一下:
// Arrange
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
});
// Act
var utcJson = JsonConvert.SerializeObject(noonUtc, settings); // "\"2016-05-12T12:00:00Z\""
var json = JsonConvert.SerializeObject(noon, settings); // "\"2016-05-12T10:00:00Z\""
... // Assertions
Run Code Online (Sandbox Code Playgroud)
好的,所以DateTimewith 的时间DateTimeKind.Unspecified已从12点调整为10点。我现在在斯德哥尔摩,比世界协调时间早两个小时,真是太公平了。
但是,让我们将序列化程序设置更改为use DateTimeStyles.AssumeUniversal,如下所示:
settings.Converters.Add(new IsoDateTimeConverter
{ …Run Code Online (Sandbox Code Playgroud)