2015-05-13 1 views
1

Как можно разрешить пользователям искать фильм с использованием TMDB API (The Movie Db) в приложении ASP.NET MVC 5 и возвращать результат JSON.ASP.NET MVC 5 получает результат JSON от API TMDB

Работа примера вне VB с помощью моего ключа Кадровой апи и возвращает результат JSON с всеми фильмами, содержащими строку «миссией»:

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 асинхронного действия(), но невежественный, что теперь делать.

ответ

2

Вы должны десериализовать строку JSON, которую они возвращают вам как 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); 

Проверьте, что на самом деле они возвращаются вызвать ответ может содержать не один объект Movie, но может содержать список, то вы должны написать свой код как это:

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

Надеется, что это помогает :)

1

Благодаря 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"})