2016-10-05 7 views
0

JSONをWebフォームのドロップダウンリストに出力しようとしています。私はこれまでのところ得ることができた:JSON逆シリアル化エラー:指定されたキーが辞書に存在しません

WebClient client = new WebClient(); 
string getString = client.DownloadString("http://myfeed.com/app_feed.php"); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
dynamic item = serializer.Deserialize<object>(getString); 
string name = item["title"]; 

return name; 

これはOKフィードを戻しますが、それはライン上のエラーに実行します:

string name = item["title"]; 

はこのエラーをバック持ち込み:

Additional information: The given key was not present in the dictionary.

これはフィードのサンプルです:

{"apps":[{"title":"title1","description":"description1"},  
{"title":"title2","description":"description2"}, 
{"title":"title3","description":"description3"} 

だから、私は最初のタイトルを参照して、私はそれらを介してループに計画していたことを考えた:

string name = item["title"]; 

しかし、明らかではありません! 私はStackoverflowを見ているが、自分のコードに適用できる答えが見つからない。

+1

のみの提案:代わりに 'dynamic'オブジェクトへのあなたのJSONをデシリアライズする、私はあなたのことをお勧めします強力な型付けされたC#クラスを作成し、それを処理して繰り返し実行できます。あなたはhttp://json2csharp.comを使ってこれを手助けすることができます。あるいはVS> 'Edit'>' Paste Special'> 'JSON As Classes'で組み込みツール:) –

+0

']}'がサンプルにありませんフィード。それは完全な餌ですか? – Arshad

+1

私はそれがちょうどタイプミス@Arshadだと思う –

答えて

3

titleは、あなたがそれを繰り返す必要がありますので、私はあなたがちょうどあなたがforeachの

foreach (var ap in item["apps"]) 
{ 
    Console.WriteLine(ap["title"]); 
} 
+0

これは私の問題のおかげで解決! – hlh3406

+0

大変うれしいコーディング – Mostafiz

1

ですべてにアクセスすることができ、インデックス0

string name = item["apps"][0]["title"]; 

を使用して最初のものを選択する表示し、別のキーappsとその配列内にありますまず、JSONが無効です。 2番目:配列なので、アイテムをループする必要があります。あなたが最初のものにアクセスしたい場合は、あなたができる:item["apps"][0]["title"]

をすべての項目をループ:

var str = @"{""apps"":[{""title"":""title1"",""description"":""description1""},  
{""title"":""title2"",""description"":""description2""}, 
{""title"":""title3"",""description"":""description3""}]}"; 

var serializer = new JavaScriptSerializer(); 
dynamic obj = serializer.Deserialize<object>(str); 
foreach (var item in obj["apps"]) 
{ 
    Console.WriteLine("item title: " + item["title"]); 
} 
+1

これはとても感謝してくれました! Upvoted :) – hlh3406

関連する問題