从JObject JSON.Net读取日期

时间:2018-06-19 16:26:21

标签: c# json.net

我想动态读取json。除了约会,我一切正常。所以我有

                    JObject obj = JObject.Load(reader);
                    data.location= (obj["duration"].Value<double>());
                    data.deviceID = (obj["deviceID"].Value<string>());
                    data.reason= (obj["reason"].Value<string>());
                    data.id= (obj["id"].Value<string>());

                    // data.startTime=(obj["startTime"].Value<DateTime>());
                    string start = (string)obj.SelectToken("startTime");

在快速监视中,日期看起来像

enter image description here 所以我尝试约会的时候没有运气。如果我可以获取字符串值,我发现了另一个使用此方法的stackoverflow帖子。但是我还不能很好地阅读它

        private DateTime TryParseIso8601(string s)
    {
        string format = s.EndsWith("Z") ? "yyyy-MM-ddTHH:mm:ssZ" : "yyyy-MM-ddTHH:mm:sszzz";
        DateTime date = new DateTime();
        DateTime.TryParseExact(s, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out date);
        return date;

    }

每个注释,由

生成的异常
data.startTime = (obj["startTime"].Value<DateTime>());

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用SelectToken来读取日期。

var jToken = obj.SelectToken("startTime.$date");
var date = jToken.Value<DateTime>();

查看此现场小提琴-https://dotnetfiddle.net/9o4FJt

示例代码:

using System;
using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

public class Program
{
    public static void Main()
    {
        var jsonString = "{\"startTime\" : { \"$date\" : \"2018-03-19T19:38:02.929Z\"}  }";

        var jObj = JsonConvert.DeserializeObject<JObject>(jsonString);

        Console.WriteLine(jObj);

        var jToken = jObj.SelectToken("startTime.$date");



        Console.WriteLine(jToken.Value<DateTime>());
        Console.WriteLine("Hello World");
    }
}