2015-06-16 2 views
0

Я сделал код для разбора этого JSONJSON Десериализация Исключение

Я генерируемый класс с JSON2C#:

public class Link 
{ 
    public string self { get; set; } 
    public string soccerseason { get; set; } 
} 

public class Self 
{ 
    public string href { get; set; } 
} 

public class Fixtures 
{ 
    public string href { get; set; } 
} 

public class Players 
{ 
    public string href { get; set; } 
} 

public class Links 
{ 
    public Self self { get; set; } 
    public Fixtures fixtures { get; set; } 
    public Players players { get; set; } 
} 

public class Team 
{ 
    public Links _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 List<Link> _links { get; set; } 
    public int count { get; set; } 
    public List<Team> teams { get; set; } 
} 

Я выполнить запрос по этому пути:

private void League_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    string requestUrl = "http://api.football-data.org/alpha/soccerseasons/122/teams"; 
    HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
    request.Method = "GET"; 
    request.ContentType = "application/json"; 
    string responseText; 
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
    using (var responseStream = new StreamReader(response.GetResponseStream())) 
    { 
     responseText = responseStream.ReadToEnd(); 
    } 

    List<RootObject> obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText); 

    foreach (var item in obj) 
    { 
     Home.Items.Add(item.name); 
    } 
} 

компилятор вернет меня:

Unhandled Exception "Newtonsoft.Json.JsonSerializationException" in Newtonsoft.Json.dll 
Cannot deserialize the current JSON object (e.g {"name":"value"}) into type "System.Collections.Generic.List"1 
[Test.MainWindow+RootObject]" because the type requires a Json array (e.g. [1,2,3]) to deserialize correctly. 

на obj десериализация.

Как это исправить? Как я могу выбрать правильную десериализацию?

+0

Try http://www.httputility.net/json-to-csharp-vb-typescript-class.aspx – Nissim

ответ

2

Вы пытаетесь десериализовать его в список RootObject, но на самом деле JSON является всего лишь одним корневым объектом.

Попробуйте

RootObject obj = JsonConvert.DeserializeObject<RootObject>(responseText); 

вместо этого. И тогда, конечно, вам нужно изменить цикл for, потому что obj больше не является List<>. Если вы хотите перебрать команд, а затем:

foreach (var item in obj.teams) 
{ 
    Home.Items.Add(item.name); 
} 
+0

Хорошо, но теперь в OBJ из в foreach я получаю подчеркнутый красным цветом, в частности, компилятор показывает сообщение: команда foreach не может работать с переменной типа Test.MainWindow.RootObject, потому что не содержит определения GetEnumerator. –

+1

'obj' больше не является списком, поэтому вы не сможете его пропустить. Вы хотите перебирать что-то, я угадываю команды. Я отредактировал свой ответ, чтобы это отразить. – Tim

+0

Хорошо, спасибо за вашу помощь, я очень ценю ваш anserw спасибо! –

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