我从JSON下载了一个JSON,现在我想反序列化为一个对象列表,但是我得到了错误代码:
'System.Collections.Generic.List`1MovieReommendation.Movie‘:“无法将当前JSON对象(例如,{”名称“:”值“})反序列化为类型Newtonsoft.Json.JsonSerializationException,因为该类型需要一个JSON数组(例如,1、2、3)才能正确反序列化。要修复此错误,要么将JSON更改为JSON数组(例如,1,2,3),要么更改反序列化类型,使之成为可以从JSON对象反序列化的普通.NET类型(例如,不像整数这样的原始类型,而不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。路径‘搜索’,第1行,位置10。“
这是我的密码:
public void Import(string URL)
{
using (WebClient wc = new WebClient())
{
var jsonString = wc.DownloadString(URL);
var Json = JsonConvert.DeserializeObject<List<Movie>>(jsonString);
}
}
public class Movie
{
#region properties
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("Year")]
public string Year { get; set; }
[JsonProperty("Type")]
public string Type { get; set; }
[JsonProperty("imbdID")]
public int imbdID { get; set; }
[JsonProperty("Poster")]
public string Poster { get; set; }
}{
"Search": [{
"Title": "Batman Begins",
"Year": "2005",
"imdbID": "tt0372784",
"Type": "movie",
"Poster": "https://m.media-amazon.com/images/M/MV5BOTY4YjI2N2MtYmFlMC00ZjcyLTg3YjEtMDQyM2ZjYzQ5YWFkXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"
}, {
"Title": "Batman v Superman: Dawn of Justice",
"Year": "2016",
"imdbID": "tt2975590",
"Type": "movie",
"Poster": "https://m.media-amazon.com/images/M/MV5BYThjYzcyYzItNTVjNy00NDk0LTgwMWQtYjMwNmNlNWJhMzMyXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"
}, {....发布于 2021-07-17 11:12:31
您需要一个Root类。
public class Root
{
public List<Movie> Search { get; set; }
}
public class Movie
{
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("Year")]
public string Year { get; set; }
[JsonProperty("Type")]
public string Type { get; set; }
[JsonProperty("imbdID")]
public int imbdID { get; set; }
[JsonProperty("Poster")]
public string Poster { get; set; }
}您需要将JSON反序列化为Root对象。
public void Import(string URL)
{
using (WebClient wc = new WebClient())
{
var jsonString = wc.DownloadString(URL);
var json = JsonConvert.DeserializeObject<Root>(jsonString);
List<Movie> movies = json.Search;
}
}FYI,您可以使用json2csharp生成基于JSON结果的类。
发布于 2021-07-17 11:18:05
尝试定义类,如下所示
paste special,Paste Json as class进入刚刚创建的类现在,当DeserializeObject,键入它到MoviesRoot,你应该是好的去
public class MoviesRoot
{
public Search[] Search { get; set; }
}
public class Search
{
public string Title { get; set; }
public string Year { get; set; }
public string imdbID { get; set; }
public string Type { get; set; }
public string Poster { get; set; }
}注意,我注意到另一个回复作为发布,所以主要的区别是在Visual内部转换json或使用第三方工具。
发布于 2021-07-17 12:19:46
你的json不是数组。它是一个具有键的对象,它是一个数组。这两类人之间有区别。您的json代表的是第一个,而不是第二个。第二个问题是您试图将其序列化为什么。
public class Search {
List<Movie> search ;
}List<Movie> movies;https://stackoverflow.com/questions/68419851
复制相似问题