JObject 解析器停止执行而不给出任何输出或错误
Posted
技术标签:
【中文标题】JObject 解析器停止执行而不给出任何输出或错误【英文标题】:JObject parser stops executing without giving any output or error 【发布时间】:2020-04-26 10:26:24 【问题描述】:我正在尝试使用以下代码解析来自 webapi 的 JSON 结果:
var pemail = "tonys@gmail.com";
var _pid = GetRequest(Global.token, apiBaseUri, apiGetPerson +"?pemail="+ pemail).Result;
var pid = JObject.Parse(_pid).GetValue("perso_nid").ToString();
MessageBox.Show(pid);
当我运行它时,它只是完成了执行,没有任何输出或错误。
在调试过程中var _pid
得到正确的值
["person_id":1141,
"person_fname":"Tony",
"person_lname":"Stark",
"person_initials":"IM",
"person_mono":"1234567890",
"person_pemail":"tonys@gmail.com",
"status":"0",
"db_tstamp":"2020-01-08T22:03:08.9659938"]
但是在下一行它只是停止执行并且不会转到下一行。没有输出或错误。
【问题讨论】:
问题末尾显示的 JSON 是一个包含对象的数组,而不是对象。要解析它并从第一个数组条目中提取person_id
的值,请使用 JToken.Parse(_pid).SelectToken("[0].person_id")?.ToString()
。
@dbc 哦,是的。它解决了。谢谢大佬。
【参考方案1】:
您的问题中显示的 JSON 是一个包含对象的数组,而不是对象。要解析它并从第一个数组条目中提取person_id
的值,请使用JToken.Parse()
和SelectToken()
:
var pid = JToken.Parse(_pid).SelectToken("[0].person_id")?.ToString();
或者,使用JArray.Parse()
强制根值确实是一个数组:
var pid = JArray.Parse(_pid)[0]?["person_id"]?.ToString();
请注意,JSON 属性名称是 "person_id"
而不是 "perso_nid"
;请务必在代码中使用正确的名称。
演示小提琴here.
【讨论】:
以上是关于JObject 解析器停止执行而不给出任何输出或错误的主要内容,如果未能解决你的问题,请参考以下文章