错误在解析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" 
    } 
    ] 
} 
+0

请出示你的JSON响应,它可能是一个数组,而不是直你得到的对象。随着*“我已经连载它” *我明白你的意思* *反序列化对不起 – Jim

+0

是的,我的意思反序列化。我得到的回应是低于 – Mayamiko

+0

JSON响应= json的内容,而不是错误 – Jim

试试这个:而不是

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; 
+0

谢谢 - 已试过,但调试时,它看起来阵列不持有任何东西。它是空的。 – Mayamiko

+0

@Mayamiko代码经过测试,确认为工作爵士。 – Jim

+0

确定 - 将尝试和调试。也许我错过了一些东西 – Mayamiko