数组JSON反序列化

时间:2015-04-25 18:55:44

标签: c# json list rss

我试图从网站RSS中获取数据,将其转换为JSON。我得到了这个JSON字符串:

http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http%3A%2F%2Frss.tecmundo.com.br%2Ffeed

我使用列表来获取值但是我得到了这个错误"无法创建抽象类或接口的实例"我不知道如何解决它。它发生在这一行。

IList<News> content = new IList<News>();

这是我的代码。

public class News
{
    public string author { get; set; }
    public string title { get; set; }
    public string content { get; set; }
    public string contentSnippet { get; set; }
    public string link { get; set; }
    public string publishedDate { get; set; }

    public string[] getFeed(string Website)
    {
        string path = @"http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=" + Website;
        var json = new WebClient().DownloadString(path);
        JObject jsonObject = JObject.Parse((string)json);

        IList<JToken> jsonData = jsonObject["responseData"]["feed"]["entries"]["0"].Children().ToList();
        IList<News> content = new IList<News>();

        foreach(JToken data in jsonData)
        {
            News finalData1 = JsonConvert.DeserializeObject<News>(jsonData.ToString());
            content.Add(finalData1);
        }

        return new string[] { "I must return something here." };
    }
}

以下是我用来更好地可视化JSON字符串的工具:http://jsonschema.net/#/

2 个答案:

答案 0 :(得分:2)

您获得的错误与JSON无关。这是因为您正在尝试创建接口的实例。你可以通过给它具体的List<T>类来解决这个问题:

IList<News> content = new List<News>();

然而,将IList<JToken>转换为IList<News>的简单方法可能是再次使用LINQ - 您可以非常轻松地完成所有这一切:

 IList<News> content = jsonObject["responseData"]["feed"]["entries"]["0"]
    .Children()
    .Select(token => JsonConvert.DeserializeObject<News>(token.ToString())
    .ToList();

编译,但实际上并不是因为您获得的数据。 entries是一个数组,所以你可能想要:

JArray array = (JArray) jsonObject["responseData"]["feed"]["entries"];
var content = array
    .Select(token => JsonConvert.DeserializeObject<News>(token.ToString())
    .ToList();

答案 1 :(得分:1)

你的问题与json无关,但试图创建一个c#中无法实现的接口实例。您需要创建实现IList接口的具体类的实例。列表就是一个例子。还有其他人,包括数组。