【问题标题】:System.InvalidOperationException: Cannot access child value on Newtonsoft.Json.Linq.JValueSystem.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JValue 上的子值
【发布时间】:2019-08-24 02:04:40
【问题描述】:

我正在尝试解决这个问题,但我找不到任何解决方案。

这是 C# 代码。

string unraw_json = reader.ReadToEnd();

            var objects = JArray.Parse(unraw_json);

            foreach (JObject items in objects)
                foreach (KeyValuePair<String, JToken> app in items)
                {
                    var appName = app.Key;
                    var username = (String)app.Value["username"];
                    var password = (String)app.Value["password"];

在调试 var appName = "username" 时,当我到达 var username(第 9 行)时,它会抛出该错误。

我已经尝试将 json 包含在大括号内,但它在 var appName 上引发了错误。我也尝试过使用不同的解析和不同的库,但我想使用 Newtonsoft.Json.Linq 库。谁能帮我吗?谢谢。

这是 JSON 文件:

[
  {
    "username": "root",
    "password": "toor"
  }
]

【问题讨论】:

    标签: c# json


    【解决方案1】:

    你内心的foreach 会在items 中迭代每个 KeyValuePairappKeyValuePair&lt;String, JToken&gt;,其中 key"username"value 是包含 "root"JToken 字符串。你的["username"]["password"] 索引一层太深了。

    由于您已经知道需要哪些键,因此您根本不需要遍历 items。直接索引items即可:

        foreach (JObject items in objects)
        {
            var username = (String)items["username"];
            var password = (String)items["password"];
        }
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 2021-08-09
      • 1970-01-01
      • 2021-08-21
      • 2018-12-19
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多