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 解析器停止执行而不给出任何输出或错误的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 的 defer 与 async

正确解析 JObject

Windows:如何使用CreateProcess停止重定向Stdout的缓冲

Rails 控制台停止输出任何文本

C#常用方法——JObject解析json对象

C# 通过JObject解析json对象