是否可以在此JSONPath查询的结果中保留时区信息?

问题描述 投票:0回答:1

我正在使用JSONPath查询(和NewtonSoft.Json.Linq)从用户提供的JSON中提取属性,并且遇到了JSON“ Date”类型的问题。

示例代码(可在https://dotnetfiddle.net/SqslzX上摆弄:]

    string json = "{ \"MyTime\":\"2014-04-20T18:15:11-0700\" }";
    var sourceToken = JToken.Parse(json);
    var myTimeToken = sourceToken.SelectToken("MyTime");
    var myTimeOffset = myTimeToken.ToObject<DateTimeOffset>();
    Console.WriteLine(myTimeToken.ToString());
    Console.WriteLine(myTimeOffset.ToString());

输出(在.net Fiddle中运行)看起来像:

4/21/2014 1:15:11 AM
4/21/2014 1:15:11 AM +00:00

我知道这些时间对于当地时区是正确的。但我想找到一种方法来保留原始时间和偏移值(如果可能)。

c# json.net jsonpath
1个回答
0
投票

问题是,默认情况下DateParseHandling的序列化器设置为DateParseHandling.DateTime。我们需要使用允许自定义序列化程序设置的方法,因此Parse不会削减它。您可以将DeserializeObject用作.NET类型,但我猜您没有强类型。这行之有效,仍然可以让您使用LINQ方法:

string json = "{ \"MyTime\":\"2014-04-20T18:15:11-0700\" }";

JsonReader reader = new JsonTextReader(new StringReader(json));
reader.DateParseHandling = DateParseHandling.DateTimeOffset; // this is what we need to change

var sourceObject = JObject.Load(reader);

var myTimeToken = sourceObject.SelectToken("MyTime");

var myTimeOffset = myTimeToken.ToObject<DateTimeOffset>();

Console.WriteLine(myTimeOffset.ToString());
//prints: 4/20/2014 6:15:11 PM -07:00
© www.soinside.com 2019 - 2024. All rights reserved.