2017-08-25 7 views
0

如果我有一个类似UTC日期的JSON字符串,例如:“2017-08-25T16:49:27.777-07:00”,Json.NET的JArray.Parse会将日期修改为另一个时间区。有没有办法来禁用这个?我希望日期保持原样。 我试图解析如何阻止Json.NET JArray.Parse更改utc日期?

JsonConvert.DefaultSettings =() => new JsonSerializerSettings 
{ 
    DateParseHandling = DateParseHandling.None 
}; 

之前把这个和它没有任何效果。 JsonLoadSettings类没有处理日期的属性。

更新
在我更改计算机中的时区后发生这种情况。 -7是PDT。我试图使用不同的时区测试我的日期转换。将我的电脑时区从太平洋变为东方后的日期,在JArray.Parse后变为“2017-08-25T19:49:27.753-04:00”。这使我自己的日期转换混乱,我试图从假定总是utc转换到本地机器时间。

+0

它没有做任何事情 –

回答

1

我刚刚测试了两种不同的方法,一种使用JsonConvert.SerializeObject<T>,另一种使用JArray.Load(JsonReader)。无论我当地的时区如何,两种方法都适用于我。

var serialized = "[\"2017-08-25T20:57:14.3914448+02:00\",\"2017-08-25T18:57:14.3914448+00:00\"]"; 

//Using JsonConvert.DeserializeObject 
var resultA = JsonConvert.DeserializeObject<IEnumerable<DateTimeOffset>>(serialized); 

//Using JArray /w JsonReader 
var jsonReader = new JsonTextReader(new StringReader(serialized)){DateParseHandling = DateParseHandling.DateTimeOffset}; 
var resultB = JArray.Load(jsonReader); 

不过,我不明白你为什么状态:

这弄乱了,我想从所谓总是UTC到本地机器时间转换我自己日期转换。

这显然不是UTC时间,所以不应该这样处理。 UTC基本上是格林威治时间(时区偏移量0),但日期时间字符串会重新表示-7小时的时区偏移量。

+0

我想坚持使用JArray.Parse,否则我必须改变很多代码。它是没有偏移量的UTC日期时间。我想JArray.Parse忽略偏移量。 –

+0

你无法使用JArray.Parse来实现这个功能(请参阅https://github.com/JamesNK/Newtonsoft.Json/issues/862)。另外,你是否说日期字符串的时区部分是错误的?如果是这样,你是否可以控制它是如何生成的,所以它可以更改为Z或+00:00以正确表示UTC? – jasper

+0

现在一切正常使用JArray.Load。我忽略了日期时间的偏移量。 –