System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JValue 上的子值

Posted

技术标签:

【中文标题】System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JValue 上的子值【英文标题】:System.InvalidOperationException: Cannot access child value on 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"
  
]

【问题讨论】:

【参考方案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"];
    

【讨论】:

以上是关于System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JValue 上的子值的主要内容,如果未能解决你的问题,请参考以下文章

视图中出现 InvalidOperationException.Collection 被修改错误