【问题标题】:JObject parser stops executing without giving any output or errorJObject 解析器停止执行而不给出任何输出或错误
【发布时间】: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 哦,是的。它解决了。谢谢大佬。

标签: c# jquery json parsing json.net


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多