Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从JObject获取数据_C#_Asp.net_Json.net - Fatal编程技术网

C# 从JObject获取数据

C# 从JObject获取数据,c#,asp.net,json.net,C#,Asp.net,Json.net,我将JSON数据存储在一个字符串中,通过使用JObject,我试图从JSON数据中获取值。我无法找出代码的根本问题是什么,因为我无法从JSON对象获取数据。下面是我的代码片段。如果有人能帮我解决这个问题,我将不胜感激 String text; try { var response = (HttpWebResponse)request.GetResponse(); using (var sr = new StreamReader(response.GetResponseStream

我将JSON数据存储在一个字符串中,通过使用
JObject
,我试图从JSON数据中获取值。我无法找出代码的根本问题是什么,因为我无法从JSON对象获取数据。下面是我的代码片段。如果有人能帮我解决这个问题,我将不胜感激

String text;
try {
    var response = (HttpWebResponse)request.GetResponse();
    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        text = sr.ReadToEnd();
        JObject jObject = JObject.Parse(text);

        string haha = (string)jObject["value/segments/requests/count/sum"];
        ViewBag.gotstring = haha;
    }

    System.Diagnostics.Debug.WriteLine(text);
} catch(Exception e) {
    System.Diagnostics.Debug.WriteLine(url);
    System.Diagnostics.Debug.WriteLine(e.ToString()); }

return View();
以下是JSON:

{
  "value": {
    "start": "2018-08-12T04:44:38.941Z",
    "end": "2018-08-12T16:44:38.941Z",
    "interval": "PT30M",
    "segments": [
      {
        "start": "2018-08-12T14:00:00Z",
        "end": "2018-08-12T14:30:00Z",
        "segments": [
          {
            "requests/count": {
              "sum": 2
            },
            "request/name": "GET Home/Index"
          },
          {
            "requests/count": {
              "sum": 1
            },
            "request/name": "GET Home/About"
          },
          {
            "requests/count": {
              "sum": 1
            },
            "request/name": "GET Home/Contact"
          }
        ]
      },
      {
        "start": "2018-08-12T14:30:00Z",
        "end": "2018-08-12T15:00:00Z",
        "segments": [
          {
            "requests/count": {
              "sum": 2
            },
            "request/name": "GET Account/Register"
          },
          {
            "requests/count": {
              "sum": 1
            },
            "request/name": "GET Account/Login"
          }
        ]
      },
      {
        "start": "2018-08-12T15:30:00Z",
        "end": "2018-08-12T16:00:00Z",
        "segments": [
          {
            "requests/count": {
              "sum": 8
            },
            "request/name": "GET Home/Index"
          },
          {
            "requests/count": {
              "sum": 8
            },
            "request/name": "GET Home/About"
          }
        ]
      }
    ]
  }
}
你能试试吗

编辑:似乎段是一个数组,这将仅获得第一段的总和


string haha=(string)jObject[“value”][“segments”][0][“segments”][“requests/count”][“sum”]

jObject
不能以这种方式工作。它返回可以按键查询的字典,但键是单级的。也就是说,您将能够获得如下数据:

var haha = jObject["value"]["segments"];
但除此之外,它变得非常复杂。您最好定义一个表示JSON的C#类并将其序列化。Visual Studio中的一个简单的“编辑=>Paste Special=>JSON as Class”给出了以下内容:

    public class Rootobject
    {
        public Value value { get; set; }
    }

    public class Value
    {
        public DateTime start { get; set; }
        public DateTime end { get; set; }
        public string interval { get; set; }
        public Segment[] segments { get; set; }
    }

    public class Segment
    {
        public DateTime start { get; set; }
        public DateTime end { get; set; }
        public Segment1[] segments { get; set; }
    }

    public class Segment1
    {
       [JsonProperty("requests/count")]
       public RequestsCount requestscount { get; set; }
       [JsonProperty("request/name")]
       public string requestname { get; set; }
    }

    public class RequestsCount
    {
        public int sum { get; set; }
    }
然后像这样反序列化:

var serialised = JsonConvert.DeserializeObject<Rootobject>(json);

var haha = serialised.value.segments.FirstOrDefault().segments.FirstOrDefault().requestscount.sum;
var serialized=JsonConvert.DeserializeObject(json);
var haha=serialized.value.segments.FirstOrDefault().segments.FirstOrDefault().requestScont.sum;

下面是一个工作示例:

那么
text
的值是多少?@trailmax我们确实在名为“text”的字符串中得到了这个值。但问题是我们无法使用parse对象从这个字符串中得到所需的值。我得到了带有无效键值的
访问的JArray值:“requests/count”“.Int32数组索引应为
exception@trailmax刚刚实现的片段是一个数组并编辑了答案。