如果我的JSON字符串的属性看起来像UTC日期,例如:“ 2017-08-25T16:49:27.777-07:00 ”,Json.NET的JArray.Parse将日期修改为另一个时区。有没有办法禁用它?我希望日期保持不变。 我尝试在解析之前放置它
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None
};
它没有效果。 JsonLoadSettings类没有处理日期的属性。
更新
在我更改计算机中的时区后会发生这种情况。 -7是PDT。我试图使用不同的时区测试我的日期转换。将我的计算机时区从太平洋更改为东部之后的日期,在JArray.Parse之后变为“2017-08-25T19:49:27.753-04:00”。这弄乱了我自己的日期转换,我试图将所谓的总是从utc转换为本地机器时间。
答案 0 :(得分:2)
我刚测试了两种不同的方法,一种使用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小时。