使用 C# 调用 API 时消除 Json 字符串中的奇怪字符



我正在为我的公司开发一个网站,我想在其中向特定人员标记技能。因此,堆栈溢出中显示的编程标记是一个有价值的来源。所以我想获取堆栈溢出的标签数据库。

我为此找到了一个 API。

标签的接口

所以我要做的是读取这个 json 字符串并 forloop 遍历页面以获取标签并将它们保存在数据库中。

private static void ReadJson()
    {
        HttpClient client = new HttpClient();
        //DefaultRequestHeader to Json
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        //Create an instance of HttpResponse & invoke the service asynchronously
        HttpResponseMessage response = client.GetAsync("https://api.stackexchange.com/2.2/tags?page=400&pagesize=100&order=desc&sort=popular&site=stackoverflow").Result;
        //Http Status code 200
        if (response.IsSuccessStatusCode)
        {
            //Read response content result into string variable
            string JSON = response.Content.ReadAsStringAsync().Result;
            //Deserialize the string(JSON) object
            var jObj = (JObject)JsonConvert.DeserializeObject(JSON);
            //access items from anonymous (Json object) type and add to the list
            var result = jObj["items"].Select(item => new
            {
                name = item["name"]
            }).ToList();
            //output the data || NOTE: **NSERT into database table**
            foreach (var item in result)
            {
                Console.WriteLine(item.name);
            }
        }
    }

所以在string JSON = response.Content.ReadAsStringAsync().Result;

方法它显示一些奇怪的字符(三角天使和形状),因为该过程停止在那里。

0�Z�n�8f��<�E/S��,-�cYtuI�f�ߗfa�g�

我在这里做错了什么?

如果有任何方法可以做到这一点,请提供您的答案。

谢谢。

你得到的是一个压缩的响应。因此,与其将其读取为字符串,不如将其读取为byte[],解压缩它,您将找到您的JSON字符串。

static async void DoStuff()
{
    HttpClient client = new HttpClient();
    var bytes = await client.GetByteArrayAsync("https://api.stackexchange.com/2.2/tags?page=400&pagesize=100&order=desc&sort=popular&site=stackoverflow");
    var decompressedJson = new StreamReader(new GZipStream(new MemoryStream(bytes), CompressionMode.Decompress)).ReadToEnd();
    // decompressedJson will now contain '{"items":[{"has_synonyms":false, .....'
    // Continue with deserialization of JSON
}
static void Main(string[] args)
{
    Task t = new Task(DoStuff);
    t.Start();
    Console.WriteLine("Doing stuff");
    Console.ReadLine();
}

}

您可以从那里继续反序列化。请记住,当您发送太多请求时,API 会引发错误。

相关内容

  • 没有找到相关文章

最新更新