C# 将json对象反序列化到列表c中

C# 将json对象反序列化到列表c中,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我从webapi获取json字符串,如下所示 {第1页,总结果:33页,总结果:2页,结果: [{投票数:8017,id:603,视频:false,投票平均数:7.9,标题:矩阵,人气:7.82272,海报路径:\/lzpwprjqbifpev5uohfokkcntw.jpg,原创语言:恩,原创标题:矩阵,流派id:[28878]《黑客帝国》讲述了一个电脑黑客加入一个地下叛乱分子的故事,这个叛乱分子与统治地球的巨大而强大的电脑战斗,发布日期:1999-03-30, {投票数:2750,id:60

我从webapi获取json字符串,如下所示

{第1页,总结果:33页,总结果:2页,结果: [{投票数:8017,id:603,视频:false,投票平均数:7.9,标题:矩阵,人气:7.82272,海报路径:\/lzpwprjqbifpev5uohfokkcntw.jpg,原创语言:恩,原创标题:矩阵,流派id:[28878]《黑客帝国》讲述了一个电脑黑客加入一个地下叛乱分子的故事,这个叛乱分子与统治地球的巨大而强大的电脑战斗,发布日期:1999-03-30, {投票数:2750,id:605,视频:false,投票平均数:6.4,标题:矩阵革命,受欢迎度:5.073697,海报路径:\/sKogjhfs5q3azmpW7DFKKAeLEG8.jpg,原创语言:en,原创标题:矩阵革命,流派id:[12,28,53878],背景路径:\/pdVHUsb2eEz9ALNTr6wfRJe5xVa.jpg,成人:错误,概述:锡安的人类城市防御机器的大规模入侵,近地天体在另一条战线上战斗以结束战争,同时也反对流氓特工史密斯,发布日期:2003-11-05, {投票计数:0,id:411948,视频:false,投票平均数:0,标题:矩阵,流行度:1.004394,海报路径:\/cseRq8R9RGN66SNUgcD7RJAxBI7.jpg,原版语言:en,原版标题:矩阵,流派id:[],背景_path:null,成人:false,概述:老约翰·惠特尼,1917年4月8日至1995年9月22日是美国动画师、作曲家和发明家,被广泛认为是计算机动画之父之一,发行日期:1971-05-18}] 我只想从上面的字符串中获取标题

这是我的密码

public List<string> ExtractMoviesList(string movieTitle)
{
    using (var client = new HttpClient())
    {
        // HTTP GET
        var response = client.GetAsync(string.Format("{0}{1}", movies_Url, movieTitle)).Result;

        using (HttpContent content = response.Content)
        {                
            var json = content.ReadAsStringAsync();

            var result = JsonConvert.DeserializeObject<List<Movies>>(json.Result);

            return result.Select(p=>p.Title).ToList();                     
        }
    }            
}

这行代码有点问题:var result=JsonConvert.DeserializeObjectjson.result;执行这一行后,var结果变为null。

您的问题是,您试图将JSON反序列化为列表,但JSON中的根对象不是数组,而是对象。这很容易看出您是否使用以下方式格式化和缩进JSON:

要使反序列化成功,要将JSON绑定到的数据模型必须反映此外部容器对象。幸运的是,或将为您生成一个:

public class Movie
{
    public string title { get; set; }
    public int vote_count { get; set; }
    public int id { get; set; }
    public bool video { get; set; }
    public double vote_average { get; set; }
    public double popularity { get; set; }
    public string poster_path { get; set; }
    public string original_language { get; set; }
    public string original_title { get; set; }
    public List<object> genre_ids { get; set; }
    public string backdrop_path { get; set; }
    public bool adult { get; set; }
    public string overview { get; set; }
    public string release_date { get; set; }
}

public class RootObject
{
    public int page { get; set; }
    public int total_results { get; set; }
    public int total_pages { get; set; }
    public List<Movie> results { get; set; }
}
这里我使用通配符[*]查找结果数组中的所有条目


正在显示这两个选项。

这行代码有问题。var result=JsonConvert.DeserializeObjectjson.result;在执行这一行之后,var结果为null。感谢dbc的帮助。它能很好地解释一切。
public class Movie
{
    public string title { get; set; }
    public int vote_count { get; set; }
    public int id { get; set; }
    public bool video { get; set; }
    public double vote_average { get; set; }
    public double popularity { get; set; }
    public string poster_path { get; set; }
    public string original_language { get; set; }
    public string original_title { get; set; }
    public List<object> genre_ids { get; set; }
    public string backdrop_path { get; set; }
    public bool adult { get; set; }
    public string overview { get; set; }
    public string release_date { get; set; }
}

public class RootObject
{
    public int page { get; set; }
    public int total_results { get; set; }
    public int total_pages { get; set; }
    public List<Movie> results { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json.Result);
return result.results.Select(m => m.title).ToList();
var result = JToken.Parse(json.Result);
return result.SelectTokens("results[*].title").Select(t => (string)t).ToList();