Я пытаюсь десериализовать следующие данные и отобразить их с помощью C #:

{  
   "_links":{  
      "self":{  
         "href":"http://api.football-data.org/v1/competitions/426/teams"
      },
      "competition":{  
         "href":"http://api.football-data.org/v1/competitions/426"
      }
   },
   "count":"20",
   "teams":[  
      {  
         "_links":{  
            "self":{  
               "href":"http://api.football-data.org/v1/teams/322"
            },
            "fixtures":{  
               "href":"http://api.football-data.org/v1/teams/322/fixtures"
            },
            "players":{  
               "href":"http://api.football-data.org/v1/teams/322/players"
            }
         },
         "name":"Hull City FC",
         "code":"HUL",
         "shortName":"Hull",
         "squadMarketValue":"122,250,000 €",
         "crestUrl":"http://upload.wikimedia.org/wikipedia/de/a/a9/Hull_City_AFC.svg"
      },
      {  
         "_links":{  
            "self":{  
               "href":"http://api.football-data.org/v1/teams/338"
            },
            "fixtures":{  
               "href":"http://api.football-data.org/v1/teams/338/fixtures"
            },
            "players":{  
               "href":"http://api.football-data.org/v1/teams/338/players"
            }
         },
         "name":"Leicester City FC",
         "code":"LCFC",
         "shortName":"Foxes",
         "squadMarketValue":"205,300,000 €",
         "crestUrl":"http://upload.wikimedia.org/wikipedia/en/6/63/Leicester02.png"
      }
   ]
}

Я сгенерировал эти классы:

public class Team
{
    public Links2 _links { get; set; }
    public string name { get; set; }
    public string code { get; set; }
    public string shortName { get; set; }
    public string squadMarketValue { get; set; }
    public string crestUrl { get; set; }
}

public class RootObject
{
    public Links _links { get; set; }
    public int count { get; set; }
    public List<Team> teams { get; set; }
}

Затем я попытался разобрать и отобразить данные:

private void ParseAndDisplay(JsonValue json)
{
    dynamic jsonObj = JsonConvert.DeserializeObject(json);

    foreach (var obj in jsonObj.teams)
    {
        Console.Out.WriteLine(obj.name);
    }
}

Однако, похоже, он ломается при входе в цикл foreach. Может кто-нибудь сказать мне, что я скучаю или делаю неправильно? Появляется ошибка необработанного исключения.

1
David Regan 24 Апр 2017 в 17:44

2 ответа

Лучший ответ

Ваш код верен только, если вы не обновите свой вопрос с ошибкой.

Хорошо, позвольте мне рассказать вам еще один способ сделать это в .net. Вы также можете использовать Linq

  1. Ссылка Newtonsoft.Json.Linq на ваш проект.

И добавьте следующий код

dynamic jsonObj = JObject.Parse(your_JSON_string);

foreach (var obj in jsonObj.teams)

{
   Console.WriteLine(obj.name);
}
0
user5375573user5375573 24 Апр 2017 в 14:53

Чтобы извлечь названия команд из вашего списка команд, вам нужно запросить список.

RootObject jsonObj = JsonConvert.DeserializeObject<RootObject>(json);

foreach (var obj in jsonObj.teams.Select(x => x.name))
{
    Console.Out.WriteLine(obj);
}
1
Rafael 24 Апр 2017 в 14:52