首页 > 解决方案 > 在c#json中读取子数据

问题描述

我想在我拥有的 json 数据中获取子数据,但我做不到。

我使用的代码是这样的

JSON

    {
  "ok": true,
  "result": [
    {
      "update_id": XXXXX,
      "message": {
        "message_id": XXXXX,
        "from": {
          "id": XXXXX,
          "is_bot": false,
          "first_name": "XXXXX",
          "last_name": "XXXXX",
          "username": "XXXXX",
          "language_code": "tr"
        },
        "chat": {
          "id": XXXXX,
          "first_name": "XXXXX",
          "last_name": "XXXXX",
          "username": "XXXXX",
          "type": "XXXXX"
        },
        "date": XXXXX,
        "text": "XXXXX"
      }
    },
    {
      "update_id": XXXXX,
      }
    }
  ]
}

我的代码

string link = "xxxxx";
var request = WebRequest.Create(link);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream data = response.GetResponseStream();
StreamReader reader = new StreamReader(data);
string rs = reader.ReadToEnd();
dynamic json = JsonConvert.DeserializeObject(rs);
foreach (var item in json)
{
MessageBox.Show(item.result.message.chat.id);
}

我的代码想像这样打印子数据,如果您能提供帮助,我会很高兴。从现在开始谢谢你

标签: c#jsonwindows

解决方案


所以基本上你的问题很简单。您的json变量不是数组,而是包含okand的对象result。如果我理解你试图做的事情,你的foreach判刑应该是这样的:foreach (var item in json.result)

和整个代码:

string link = "xxxxx";
var request = WebRequest.Create(link);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream data = response.GetResponseStream();
StreamReader reader = new StreamReader(data);
string rs = reader.ReadToEnd();
dynamic json = JsonConvert.DeserializeObject(rs);
foreach (var item in json.result)
{
    MessageBox.Show(item.result.message.chat.id);
}

另外我建议您使用特定类型而不是dynamic. 在这种情况下,强类型可以帮助您在问题之前发现问题。为了加倍努力,我建议您使用HttpClient而不是WebRequest. 更多信息:https ://stackoverflow.com/a/53157401/9096935


推荐阅读