将JSON结果转换为对象类型

时间:2020-04-16 08:51:12

标签: c#

运行以下代码时,出现错误提示

无法将类型为“ Newtonsoft.Json.Linq.JArray”的对象转换为类型为“ Newtonsoft.Json.Linq.JObject”

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
    var res = new StreamReader(response.GetResponseStream()).ReadToEnd();

    JObject joResponse = JObject.Parse(res.ToString());
    JObject ojObject = (JObject)joResponse["result"]; --> This line is throwing error
    string ticketnumber = ((JValue)ojObject.SelectToken("number")).Value.ToString();

    return ticketnumber;
}

我尝试通过以下方式将其转换为Object类型,但出现错误

JObject ojObject = (JObject)joResponse["result"].ToObject(JObject));

我的第三方API以以下格式返回数据,在c#中,我需要获取数字字段的值,即“ IM3423354”

{
  "import_set": "ISET0010001",
  "staging_table": "imp_user",
  "result": [
    {
      "transform_map": "User",
      "table": "sys_user",
      "display_name": "number",
      "display_value": "IM3423354",
      "record_link": "https://instance.service-now.com/api/now/table/sys_user/ea928be64f411200adf9f8e18110c777",
      "status": "inserted", 
      "sys_id": "ea928be64f411200adf9f8e18110c777"
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

这里的主要问题是您试图将结果作为对象访问,但实际上它是一个包含单个对象的数组。因此,您需要执行此操作以获取对象。

JToken ojObject = joResponse["result"][0];

但是还有另一个问题,因为JSON中没有名为number的字段。我认为您想要的值实际上在一个名为display_value的字段中。因此,您还需要使用它。

string ticketnumber = ((JValue)ojObject.SelectToken("display_value")).Value.ToString();

您甚至可以将其缩短为以下内容;

string ticketnumber = (string)joResponse.SelectToken("result[0].display_value");