如何从c#中的json文件中获取列表?

时间:2015-06-06 11:54:53

标签: c# json windows-phone-8.1 json.net

我正在尝试显示从列表框中的eztv.re API中提取的列表。我有 尝试使用:

p {
   border:1px solid black;
   display:-webkit-flex;
   display:-moz-flex;
   display:flex;
   -webkit-align-items: baseline;
   align-items: baseline;
}

.one {
   font-size:2.0em;
}

.two {
   font-size:3.0em;
   margin-left:auto;
}

}

但是root.select不起作用,我的RootObject类是:

using (HttpClient client = new HttpClient())
{
      using (HttpResponseMessage response = await client.GetAsync(("http://eztvapi.re/shows/1&query_term=" + SearchTextBox.Text)))
      {
                using (Stream stream = response.Content.ReadAsStreamAsync().Result)
                {
                          using (StreamReader reader = new StreamReader(stream))
                          {
                                     string json = reader.ReadToEnd();
                                     var root = JsonConvert.DeserializeObject<RootObject>(json);
                                     var articles = root.Select(m => new Article { Name = root.title, ImagePath = root.images.poster, id = root._id, Year = root.year }).ToList();
                                     foreach (Article s in articles)
                                     {
                                     this.Listbox.Items.Add(new Article { Name = s.Name, ImagePath = s.ImagePath, Year = s.Year, id = s.id });
                          }
                }
      }

Article类只是一个字符串列表。我的代码与另一个API(yts.to)完美匹配,但是在那一个中​​,我使用RootObject.Data,包含

的数据类
public class RootObject
{
    public string _id { get; set; }
    public Images images { get; set; }
    public string imdb_id { get; set; }
    public object last_updated { get; set; }
    public int num_seasons { get; set; }
    public string slug { get; set; }
    public string title { get; set; }
    public string tvdb_id { get; set; }
    public string year { get; set; }
}

我知道对此的解决方案可能相当简单,但我似乎无法找到它。

2 个答案:

答案 0 :(得分:1)

您的API似乎返回List<RootObject>,而不是RootObject。这对我有用:

string json = reader.ReadToEnd();
var root = JsonConvert.DeserializeObject<List<RootObject>>(json);
var articles = root.Select(m => new Article { Name = m.title, ImagePath = m.images.poster, id = m._id, Year = m.year });

答案 1 :(得分:0)

您可以使用网站http://json2csharp.com/根据JSON字符串生成C#类。

http://eztvapi.re/shows/1&query_term=abc发送的结果是 RootObject数组

因此,在您的代码中,您需要将JsonConvert.DeserializeObject行更新为RootObject数组。

    var root = JsonConvert.DeserializeObject<RootObject[]>(json);