如何阻止Json.NET JArray.Parse更改utc日期?

时间:2017-08-25 17:50:51

标签: .net json.net

如果我的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转换为本地机器时间。

1 个答案:

答案 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小时。