错误在解析JSON响应
我有下面这段代码会从一个API调用的JSON响应。错误在解析JSON响应
我已经连载它,我试图使用LINQ获取特定的父节点,并通过网络搜索查找特定的文本。
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync(some url).Result;
string strJson = response.Content.ReadAsStringAsync().Result;
object jObj = (JObject)JsonConvert.DeserializeObject(strJson);
Assert.IsTrue(response.IsSuccessStatusCode.Equals(true));
var a = JArray.Parse(jObj.ToString());
var Cast = a.SelectMany(x => x["episodes"]);
我得到一个错误:
Object is not Json Array
的我怎么能做到这一点任何想法?
JSON响应
{
"cast": [
{
"character": "Eddard Stark",
"credit_id": "5256c8ad19c2956ff60478a6",
"id": 48,
"name": "Sean Bean",
"profile_path": "/iIxP2IzvcLgr5WaTBD4UfSqaV3q.jpg",
"order": 0
},
{
"character": "Jon Snow",
"credit_id": "5256c8af19c2956ff6047af6",
"id": 239019,
"name": "Kit Harington",
"profile_path": "/dwRmvQUkddCx6Xi7vDrdnQL4SJ0.jpg",
"order": 0
}
],
"crew": [
{
"id": 93223,
"credit_id": "5256c8a219c2956ff6046f0b",
"name": "Brian Kirk",
"department": "Directing",
"job": "Director",
"profile_path": null
},
{
"id": 59984,
"credit_id": "54eef41d9251417971005b8d",
"name": "Marco Pontecorvo",
"department": "Camera",
"job": "Director of Photography",
"profile_path": null
},
{
"id": 1204180,
"credit_id": "54eef453c3a3680b80006153",
"name": "Frances Parker",
"department": "Editing",
"job": "Editor",
"profile_path": null
},
{
"id": 9813,
"credit_id": "5256c8a019c2956ff6046e2b",
"name": "David Benioff",
"department": "Writing",
"job": "Writer",
"profile_path": "/8CuuNIKMzMUL1NKOPv9AqEwM7og.jpg"
},
{
"id": 228068,
"credit_id": "5256c8a219c2956ff6046e4b",
"name": "D. B. Weiss",
"department": "Writing",
"job": "Writer",
"profile_path": "/caUAtilEe06OwOjoQY3B7BgpARi.jpg"
}
]
}
试试这个:而不是
JObject jObj = (JObject)JsonConvert.DeserializeObject(strJson);
Assert.IsTrue(response.IsSuccessStatusCode.Equals(true));
var a = (JArray)jObj["cast"];
:
object jObj = (JObject)JsonConvert.DeserializeObject(strJson);
Assert.IsTrue(response.IsSuccessStatusCode.Equals(true));
var a = JArray.Parse(jObj.ToString());
它已经反序列化,所以没有必要再分析它。
ACCES的a
阵列进一步,例如:
foreach (var actor in a)
{
Console.WriteLine(actor["character"]);
}
或者您可以使用动态功能:
dynamic jObj = JsonConvert.DeserializeObject(strJson);
var a = jObj.cast;
谢谢 - 已试过,但调试时,它看起来阵列不持有任何东西。它是空的。 – Mayamiko
@Mayamiko代码经过测试,确认为工作爵士。 – Jim
确定 - 将尝试和调试。也许我错过了一些东西 – Mayamiko
请出示你的JSON响应,它可能是一个数组,而不是直你得到的对象。随着*“我已经连载它” *我明白你的意思* *反序列化对不起 – Jim
是的,我的意思反序列化。我得到的回应是低于 – Mayamiko
JSON响应= json的内容,而不是错误 – Jim