小编Lur*_*xel的帖子

为什么在使用DateTimeStyles.AssumeUniversal时,JsonConvert用DateTimeKind.Unspecified更改DateTimes的时间?

我正在构建一个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)

datetime json.net

5
推荐指数
1
解决办法
753
查看次数

标签 统计

datetime ×1

json.net ×1