ASP.NET MVC 5 从 TMDB API 获得 JSON 结果

ASP.NET MVC 5 getting a JSON result from TMDB API

如何让用户在 ASP.NET MVC 5 应用程序和 return JSON 中使用 TMDB API (The Movie Db) 搜索电影结果。

VB 之外的工作示例,使用我的个人 api 键和 returning json 结果,所有电影都包含字符串 "mission":

http://api.themoviedb.org/3/search/movie?api_key=841c..&query=mission

文档 (http://docs.themoviedb.apiary.io/#reference/search/searchmovie) 建议对 C# 使用以下代码:

var baseAddress = new Uri("http://api.themoviedb.org/3/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{

    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");

    using(var response = await httpClient.GetAsync("search/movie"))
    {
        string responseData = await response.Content.ReadAsStringAsync();
    }
}

我将代码粘贴到异步操作 MovieSearch() 中,但不知道现在该做什么。

您必须将 JSON 字符串反序列化为 return 您作为 responseData 的 c# 类型 Movie。对于反序列化,您可以使用像 JSON.NET 这样的库,然后这样写:

class Movie
{
   public string Name{ get; set;}
   public decimal Rating{ get; set;}
}

 string output = "{ "Name": "The Matrix", "Rating": "4.0"}"

Movie deserializedMovie = JsonConvert.DeserializeObject<Movie>(responseData);

检查它们实际上是什么 return 导致响应不能包含单个 Movie 对象,但可以包含一个列表,那么您必须像这样编写代码:

List<Movie> movies= JsonConvert.DeserializeObject<List<Movie>>(responseData);

希望对您有所帮助:)

感谢 Aminuls 的帮助我找到了一个很好的解决方案:

// SearchMovie method

public async Task MovieSearch(string search)
{          
    System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

    var baseAddress = new Uri("http://api.themoviedb.org/3/");

    using (var httpClient = new HttpClient { BaseAddress = baseAddress })
    {     
        httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");

        // api_key can be requestred on TMDB website
        using (var response = await httpClient.GetAsync("search/movie?api_key=941c...&query=" + search))
        {
            string responseData = await response.Content.ReadAsStringAsync();

            var model = JsonConvert.DeserializeObject<RootObject>(responseData);

            foreach (var result in model.results)
            {
                // All movies
                // System.Diagnostics.Debug.WriteLine(result.title);
            }      
        }
    }
}

// Generated model from json2csharp.com

public class Result
{
    public bool adult { get; set; }
    public string backdrop_path { get; set; }
    public int id { get; set; }
    public string original_title { get; set; }
    public string release_date { get; set; }
    public string poster_path { get; set; }
    public double popularity { get; set; }
    public string title { get; set; }
    public bool video { get; set; }
    public double vote_average { get; set; }
    public int vote_count { get; set; }
}

public class RootObject
{
    public int page { get; set; }
    public List<Result> results { get; set; }
    public int total_pages { get; set; }
    public int total_results { get; set; }
}

// Examle of search functionaly in View

@Html.ActionLink("Search movie", "MovieSearch", new { search = "mission"})