2016-11-19 21 views
0

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レスポンスを表示してください、それはおそらくアレイとストレートではありません。

foreach (var actor in a) { Console.WriteLine(actor["character"]); } 

はまた、あなたが動的な機能を使用することができます。

a配列さらに、例をACCESあなたが得ているオブジェクト。 *「私はそれをシリアライズしました」*あなたの意味を理解しています*非直列化* – Jim

+0

申し訳ありません。私が受け取る応答は – Mayamiko

+0

です.Jsonの応答= Jsonの内容ではなく、エラー – Jim

答えて

0

はこれを試してみてください:

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()); 

dynamic jObj = JsonConvert.DeserializeObject(strJson); 
var a = jObj.cast; 
+0

でした。ありがとう - これを試してみましたが、デバッグするとの配列に何も保持されていません。それはnullです。 – Mayamiko

+0

@Mayamikoコードは、動作確認済みであることがテストされ、確認されています。 – Jim

+0

OK - 試してデバッグします。たぶん私は何かを逃した – Mayamiko

関連する問題