2017-01-29 10 views
-1

JSONからゲームの値を取得しようとしていますが、同じ名前のフィールドが複数あるため、その個別の値を取得できる方法があるかどうかは疑問でした、ここでは基本的なJSON構造である:JObjectを使用してJSONからデータを取得する

"response": { 

    "game_count": 119, 
    "games": [ 
     { 
      "appid": 3920, 
      "playtime_forever": 0 
     }, 
     { 
      "appid": 4000, 
      "playtime_forever": 278 
     }, 

...

私は何とかappIDがを使用して、playtime_foreverキーを取得することにより財産を取得する必要があります。

答えて

3

あなたがクラスにあなたのJSONに変換し、クエリすることができます

class ResponseJSON 
{ 
    [JsonProperty("response")] 
    public Result Response { get; set; } 
} 

class Result 
{ 
    [JsonProperty("game_count")] 
    public string Count { get; set; } 
    [JsonProperty("games")] 
    public List<Game> Gmaes { get; set; }  
} 

class Game 
{ 
    [JsonProperty("appid")] 
    public string Id { get; set; } 
    [JsonProperty("playtime_forever")] 
    public string PlayTime { get; set; } 
} 

var resp = JsonConvert.DeserializeObject<ResponseJSON>(jsonstr); 

そしてあなたはforループを使用してオブジェクトを反復処理することができます

foreach(game in resp.Respone.Games) { 
    var playtime = game.PlayTime; 
    // do stuff here 
} 

それとも、あなたのクエリにLINQを使用することができますゲーム:あなたは、あなたのプロジェクトの場合にhereからnewtonsoft DLLを追加する必要が

var selectiveGames = resp.Response.Games.Where(x=> x.PlayTime == 220).ToList(); 

あなたはそれを持っていません。

UPDATE:オリジナルのJSONでは、上記のコードは完璧に動作しています。

+0

foreachループで「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます – John

+0

アップデートを確認してください@John私は自分のコンソールアプリケーションでJSONをテストしたところで動作しています – Yaser

+0

ほぼそこに、私は '' response.Response.Games.Where''にエラーが発生しています: '' CommandRegistry.Resultにはゲームの定義が含まれていません.'' – John

関連する問題