api поиска stackoverflow
Я хотел бы использовать метод поиска API stackoverflow для возврата структуры JSON результатов на основе ключевого слова поиска, а затем отобразить эти результаты (название, описание и url) в SearchResults div.
Я новичок в C# и моя первая попытка что-то вроде этого:
protected void searchStockOverflow(string y)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.stackoverflow.com/1.1/search?intitle="+y);
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{ "intitle": "" + y + ""}";
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
SearchResults.InnerHtml += "<div style='border:1px solid blue;margin:5px;'>";
SearchResults.InnerHtml += responseText + "<br />";
SearchResults.InnerHtml += "</div><br style='clear:both;' />";
}
}
проблема в том, что возвращаемое выглядит как мусор dingbats - я думаю, потому что оно сериализовано и должно быть десериализовано?
3 ответов
Я бы определенно сказал, что рассмотрю использование клиента REST; однако, чтобы посмотреть на проблемы... как правило, вы хотите десериализовать данные как JSON вручную,затем запустите эти данные через код пользовательского интерфейса. Например:
static void SearchStackOverflow(string y)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.stackoverflow.com/1.1/search?intitle=" + Uri.EscapeDataString(y));
httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
httpWebRequest.Method = "GET";
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
string responseText;
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseText = streamReader.ReadToEnd();
}
var result = (SearchResult)new JavaScriptSerializer().Deserialize(responseText, typeof(SearchResult));
.... do something with result ...
}
class SearchResult
{
public List<Question> questions { get; set; }
}
class Question
{
public string title { get; set; }
public int answer_count { get; set; }
}
который использует JavaScriptSerializer из системы.Сеть.Увеличение.dll файлы
посмотрите Stacky Stackapps .Net Клиентская Библиотека который является REST-based API, который предоставляет доступ к семейству веб-сайтов stackoverflow.
к сожалению, я на своем Mac и не могу запустить тест на вашем коде. Возможно, вы захотите проверить кодировку символов как вашей страницы, так и потока ответов. Если они не совпадают; это может привести к неправильному отображению символов, поступающих из потока ответов, следовательно, мусор, который вы видите.