6

stackoverflow API の search メソッドを使用して、検索キーワードに基づいて結果の 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;' />";
        }
    }

問題は、返されるものがディンバットのごみのように見えることです-シリアル化されており、逆シリアル化する必要があるためだと思いますか?

4

3 に答える 3

8

REST クライアントの使用を検討してください。ただし、問題を確認するには...通常、データを JSON として手動で逆シリアル化し、そのデータを UI コードで実行します。例えば:

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; }
}

System.Web.Extensions.dll の JavaScriptSerializer を使用する

于 2011-05-17T13:05:10.747 に答える
3

Stacky StackApps .Net Client Libraryもご覧ください。これは、stackoverflow ファミリの Web サイトへのアクセスを提供する REST ベースの API です。

于 2011-05-17T13:00:15.847 に答える
0

残念ながら、私はMacを使用しており、コードでテストを実行できません。ページと戻ってくる応答ストリームの両方の文字エンコードを確認することをお勧めします。それらが一致しない場合; 応答ストリームからの文字が正しくレンダリングされない可能性があります。そのため、表示されているゴミが発生します。

于 2011-05-17T12:57:24.830 に答える