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
中迭代每个 KeyValuePair
。 app
是 KeyValuePair<String, JToken>
,其中 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 上的子值的主要内容,如果未能解决你的问题,请参考以下文章