2015-05-05 46 views
1
using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("https://www.googleapis.com/youtube/v3/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    HttpResponseMessage response = client.GetAsync("search?q=manam&type=video&order=relevance&part=snippet&maxResults=50&key=AIzaSyA4GZFAgfvsAItwFRmnAZvbTHoDeyunf2k").Result; 
    if (response.IsSuccessStatusCode) 
    { 
     dynamic lists = await response.Content.ReadAsAsync<mycustomObject>(); // what should I write here 
    } 
} 

我想在我的项目中使用web api调用YouTube视频。 这是我到现在为止所尝试的代码, 以获得响应我应该在myCustomObject的地方使用什么?youtube api in c#code

当我在浏览器上面的URL我正在尝试的数据,当我跑上面的代码返回null,

任何问题上面的代码?

我只是想从这种方法得到的数据,

任何帮助将不胜感激。

回答

3

您需要一个表示从调用返回的JSON数据的类。

如果你调用在浏览器中你GET要求你会看到JSON响应看起来是这样的:

{ 
    kind: "youtube#searchListResponse" 
    etag: ""tbWC5XrSXxe1WOAx6MK9z4hHSU8/lh-waoy9ByBY2eB-oZs7niK51FU"" 
    nextPageToken: "CDIQAA" 
    pageInfo: 
     { 
      totalResults: 176872 
      resultsPerPage: 50 
     }- 
    items: [...50]- 
} 

所以,你需要创建一个类字段匹配其反序列化命令然后填充为您。事情是这样的:

public class YoutubeApiResponse() 
{ 
    public string kind {get; set;} 
    public string etag {get; set;} 
    public string nextPageToken {get; set;} 
    public PageInfo pageInfo {get; set;} 
    public List<Item> items {get; set;} 
} 

而且这样调用:

var youtubeResponse = await response.Content.ReadAsAsync<YoutubeApiResponse().Result(); 

我建议你看.Net Client Library - 它将采取了很多这方面的东西对你的照顾。

+0

你是什么意思? – RagtimeWilly

+0

您可以创建自己的方法,将字段作为参数并构造URL来封装逻辑。你是这个意思吗? – RagtimeWilly

+0

没问题,很高兴帮助。 – RagtimeWilly