数组 JSON 反序列化
Array JSON deserialize
我正在尝试从网站 RSS 获取数据并将其转换为 JSON。我得到了这个 JSON 字符串:
http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http%3A%2F%2Frss.tecmundo.com.br%2Ffeed
我正在使用列表来获取值,但出现此错误 "Cannot create an instance of the abstract class or interface",我不知道如何解决。它发生在这一行。
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/#/
您的问题与 json 无关,而是与尝试创建接口实例有关,这在 C# 中是不可能的。您需要创建一个实现 IList 接口的具体实例 class。列表就是一个例子。还有其他的,包括数组。
您遇到的错误与 JSON 无关。这是因为您正在尝试创建接口的实例。你 可以 通过给它具体的 List<T>
class:
来解决这个问题
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();
我正在尝试从网站 RSS 获取数据并将其转换为 JSON。我得到了这个 JSON 字符串:
http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http%3A%2F%2Frss.tecmundo.com.br%2Ffeed
我正在使用列表来获取值,但出现此错误 "Cannot create an instance of the abstract class or interface",我不知道如何解决。它发生在这一行。
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/#/
您的问题与 json 无关,而是与尝试创建接口实例有关,这在 C# 中是不可能的。您需要创建一个实现 IList 接口的具体实例 class。列表就是一个例子。还有其他的,包括数组。
您遇到的错误与 JSON 无关。这是因为您正在尝试创建接口的实例。你 可以 通过给它具体的 List<T>
class:
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();