我试图从网站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/#/
答案 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接口的具体类的实例。列表就是一个例子。还有其他人,包括数组。