Botframework Microsoft认知服务Web搜索API-反序列化问题

Botframework Microsoft认知服务Web搜索API-反序列化问题,botframework,microsoft-cognitive,Botframework,Microsoft Cognitive,我想学习认知服务Web搜索API,所以我开始创建一个机器人应用程序。我已经有了一个帐户子密钥和其他必需的信息,我也读了很多文章并观看了2016年构建视频。我在反序列化结果时遇到了麻烦。 我找不到可以用来执行此操作的代理类。 我使用的url是 我为以前的api版本找到了一个代理类。谁能告诉我如何在VS2015中为这些服务获取api请求/响应的代理类 我的代码如下所示: string BingSearchUrl = "https://api.cognitive.microsoft.com/bi

我想学习认知服务Web搜索API,所以我开始创建一个机器人应用程序。我已经有了一个帐户子密钥和其他必需的信息,我也读了很多文章并观看了2016年构建视频。我在反序列化结果时遇到了麻烦。 我找不到可以用来执行此操作的代理类。 我使用的url是 我为以前的api版本找到了一个代理类。谁能告诉我如何在VS2015中为这些服务获取api请求/响应的代理类

我的代码如下所示:

  string BingSearchUrl =  "https://api.cognitive.microsoft.com/bing/v5.0/search/";
   const string bingKey = "Key";

    public static  async Task<string> Search(string query)
    {
        var client = HttpClientFactory.Create();
        var queryString = BingSearchUrl + "?q=" + query + "&count=10";        
        // Request headers
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey);
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        // Request parameters
        string r = await client.GetStringAsync(queryString);
        var jsonResult = JsonConvert.DeserializeObject<Bing.ExpandableSearchResult>(r);

        return jsonResult.Web.First().Title;
string BingSearchUrl=”https://api.cognitive.microsoft.com/bing/v5.0/search/";
常量字符串bingKey=“Key”;
公共静态异步任务搜索(字符串查询)
{
var client=HttpClientFactory.Create();
var queryString=BingSearchUrl+“?q=“+query+”&count=10”;
//请求头
client.DefaultRequestHeaders.Add(“Ocp Apim订阅密钥”,bingKey);
client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
//请求参数
string r=await client.GetStringAsync(queryString);
var jsonResult=JsonConvert.DeserializeObject(r);
返回jsonResult.Web.First().Title;
尝试下面的代码

  public string BingSearchUrl = "https://api.cognitive.microsoft.com/bing/v5.0/search/";
        const string bingKey =[KEY];

        public async void Search()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey);

            // Request parameters
            queryString["q"] = "microsoft";
            queryString["count"] = "10";
            queryString["offset"] = "0";
            queryString["mkt"] = "en-us";
            queryString["safeSearch"] = "Moderate";
            var uri = "https://api.cognitive.microsoft.com/bing/v5.0/news/search?" + queryString;

            var response = await client.GetStringAsync(uri);
            var jsonResult = JsonConvert.DeserializeObject<BingJson>(response);

            string title = jsonResult.value[0].name.ToString();

        }

有了这个模型,我就能得到想要的结果。另一个答案中给出的模型在我的案例中不起作用

namespace BingSearchBot
{
    public class RootObject
    {
        public string _type { get; set; }
        public WebPages webPages { get; set; }
        public RelatedSearches relatedSearches { get; set; }
        public RankingResponse rankingResponse { get; set; }
    }
    public class WebPages
    {
        public string webSearchUrl { get; set; }
        public int totalEstimatedMatches { get; set; }
        public List<Value> value { get; set; }
    }
    public class Value
    {
        public string id { get; set; }
        public string name { get; set; }
        public string url { get; set; }
        public List<About> about { get; set; }
        public string displayUrl { get; set; }
        public string snippet { get; set; }
        public List<DeepLink> deepLinks { get; set; }
        public string dateLastCrawled { get; set; }
        public List<SearchTag> searchTags { get; set; }
    }
    public class About
    {
        public string name { get; set; }
    }

    public class DeepLink
    {
        public string name { get; set; }
        public string url { get; set; }
        public string snippet { get; set; }
    }

    public class SearchTag
    {
        public string name { get; set; }
        public string content { get; set; }
    }
    public class Value2
    {
        public string text { get; set; }
        public string displayText { get; set; }
        public string webSearchUrl { get; set; }
    }

    public class RelatedSearches
    {
        public string id { get; set; }
        public List<Value2> value { get; set; }
    }

    public class Value3
    {
        public string id { get; set; }
    }

    public class Item
    {
        public string answerType { get; set; }
        public int resultIndex { get; set; }
        public Value3 value { get; set; }
    }

    public class Mainline
    {
        public List<Item> items { get; set; }
    }

    public class RankingResponse
    {
        public Mainline mainline { get; set; }
    }
}
名称空间搜索机器人
{
公共类根对象
{
公共字符串_type{get;set;}
公共网页网页{get;set;}
公共关联搜索关联搜索{get;set;}
公共RankingResponse RankingResponse{get;set;}
}
公开课网页
{
公共字符串webSearchUrl{get;set;}
公共整数totalEstimatedMatches{get;set;}
公共列表值{get;set;}
}
公共阶级价值
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共字符串url{get;set;}
关于{get;set;}的公共列表
公共字符串displayUrl{get;set;}
公共字符串片段{get;set;}
公共列表深度链接{get;set;}
公共字符串dateLastCrawled{get;set;}
公共列表搜索标记{get;set;}
}
公开课关于
{
公共字符串名称{get;set;}
}
公共类深度链接
{
公共字符串名称{get;set;}
公共字符串url{get;set;}
公共字符串片段{get;set;}
}
公共类搜索标签
{
公共字符串名称{get;set;}
公共字符串内容{get;set;}
}
公共类价值2
{
公共字符串文本{get;set;}
公共字符串displayText{get;set;}
公共字符串webSearchUrl{get;set;}
}
公共类相关搜索
{
公共字符串id{get;set;}
公共列表值{get;set;}
}
公共类价值3
{
公共字符串id{get;set;}
}
公共类项目
{
公共字符串应答类型{get;set;}
public int resultIndex{get;set;}
公共价值3值{get;set;}
}
公共级干线
{
公共列表项{get;set;}
}
公共类响应
{
公共主线主线{get;set;}
}
}

该服务返回结果,但当我反序列化Object时,它显示为空,这对相同的结果也没有帮助。此外,我的问题是如何下载此web api服务的代理类。我查找了以前版本的Bing Search,我们可以将其作为服务引用添加到我们的项目中,但使用此新URL,我无法将其作为服务引用添加vice reference和我都无法获取WSDL。我用以前版本的proxy尝试了它,但也没有帮到我。非常奇怪的是,在所有Web搜索文档中都没有提到如何获取Web结果。最后,在多次尝试之后,我创建了一个工作正常的模型。您的模型@codelahiru有问题吗ns由于某种原因无法反序列化的数组属性。
namespace BingSearchBot
{
    public class RootObject
    {
        public string _type { get; set; }
        public WebPages webPages { get; set; }
        public RelatedSearches relatedSearches { get; set; }
        public RankingResponse rankingResponse { get; set; }
    }
    public class WebPages
    {
        public string webSearchUrl { get; set; }
        public int totalEstimatedMatches { get; set; }
        public List<Value> value { get; set; }
    }
    public class Value
    {
        public string id { get; set; }
        public string name { get; set; }
        public string url { get; set; }
        public List<About> about { get; set; }
        public string displayUrl { get; set; }
        public string snippet { get; set; }
        public List<DeepLink> deepLinks { get; set; }
        public string dateLastCrawled { get; set; }
        public List<SearchTag> searchTags { get; set; }
    }
    public class About
    {
        public string name { get; set; }
    }

    public class DeepLink
    {
        public string name { get; set; }
        public string url { get; set; }
        public string snippet { get; set; }
    }

    public class SearchTag
    {
        public string name { get; set; }
        public string content { get; set; }
    }
    public class Value2
    {
        public string text { get; set; }
        public string displayText { get; set; }
        public string webSearchUrl { get; set; }
    }

    public class RelatedSearches
    {
        public string id { get; set; }
        public List<Value2> value { get; set; }
    }

    public class Value3
    {
        public string id { get; set; }
    }

    public class Item
    {
        public string answerType { get; set; }
        public int resultIndex { get; set; }
        public Value3 value { get; set; }
    }

    public class Mainline
    {
        public List<Item> items { get; set; }
    }

    public class RankingResponse
    {
        public Mainline mainline { get; set; }
    }
}