2015-06-05 9 views
0

Я успешно десериализации JSON файл, и я получаю результаты, но после окончания результатов я получаю «объект не установлен экземпляр object` ошибкиJSON объект Null

JSON файла:

"radiant_team": { 
      "team_name": "EHOME", 
      "team_id": 4, 
      "team_logo": 52122954231169668, 
      "complete": true 
     }, 
     "dire_team": { 
      "team_name": "Team Secret", 
      "team_id": 1838315, 
      "team_logo": 543025270456493033, 
      "complete": true 

public partial class LiveLeagues 
{ 
    public LiveGames Result { get; set; } 
} 
public class LiveGames 
{ 
    public List<GameStats> games { get; set; } 
    public int status { get; set; } 
} 
public class GameStats 
     { 
      public List<BasePlayer> players { get; set; } 
      public RadiantTeam radiant_team { get; set; } 
      public DireTeam dire_team { get; set; } 
     } 

public class DireTeam 
    { 
     public string team_name { get; set; } 
     public int team_id { get; set; } 
     public object team_logo { get; set; } 
     public bool complete { get; set; } 
    } 

public class RadiantTeam 
    { 
     public string team_name { get; set; } 
     public int team_id { get; set; } 
     public object team_logo { get; set; } 
     public bool complete { get; set; } 
    } 

LiveLeagues.LiveLeagues liveGames = JsonConvert.DeserializeObject<LiveLeagues.LiveLeagues>(response.Content.ReadAsStringAsync().Result); 

    foreach (var leagues in liveGames.Result.games) 
     { 
      MessageBox.Show(leagues.dire_team.team_id.ToString()); 
      MessageBox.Show(leagues.radiant_team.team_id.ToString()); 
     } 

Я попытался выполнить итерацию через JSON и проверить, будут ли значения отображаться. Я тестировал его на MessageBox.Show, и я получил результат «EHOME» и «Team Secret», но после этого появляется ошибка «объект не установлен в экземпляр объекта»

+2

Пожалуйста, покажите полный json и значение liveGames.Result.games.Count. Я думаю, что есть «пустая» игра в конце вашего json – Fortega

+0

'response.Content.ReadAsStringAsync(). Результат - это, безусловно, неправильно. –

+0

это файл JSON, я загрузил его на pastebin, не могу опубликовать его на своем посте слишком большим http://pastebin.com/P8EPG41X – Nevi

ответ

1

Когда json разрешает игры без dire_team и/или radiant_team свойство, вы должны делать нулевые чеки, чтобы убедиться, что они есть:

foreach (var leagues in liveGames.Result.games){ 
    if(leagues.dire_team != null) 
    MessageBox.Show(leagues.dire_team.team_id.ToString()); 
    else 
    MessageBox.Show("no dire team for this game"); 

    if(leagues.radiant_team != null)  
    MessageBox.Show(leagues.radiant_team.team_id.ToString()); 
    else 
    MessageBox.Show("no radiant team for this game"); 
} 

или вы можете попробовать использовать значения по умолчанию для этих объектов в конструкторе GameStats.

public class GameStats 
    { 
     public List<BasePlayer> players { get; set; } 
     public RadiantTeam radiant_team { get; set; } 
     public DireTeam dire_team { get; set; } 

     public GameStats(){ 
      dire_team = new DireTeam(); 
      radiant_team = new RadiantTeam(); 
     } 
    } 
+0

спасибо за это так плохо, что только нуль проверяет каждое свойство? есть ли какой-нибудь не утомительный способ сделать это? – Nevi

+0

@Nevi: см. Мое редактирование. Но это не будет работать для каждой библиотеки json. Вы должны проверить, работает ли это для вас – Fortega

Смежные вопросы