簡體   English   中英

如何使用 Json (C#) 從 URL API 檢索字符串值?

[英]How to retrieve a string value from a URL API using Json (C#)?

你好 Stackoverflow 大師!

我正在嘗試使用 JSON 從 API 中檢索一個隨機的 Chuck Norris 笑話,但我不確定如何檢索 URL 上值的字符串值。 這是我正在使用的,但我感到迷茫! 謝謝你的熱心幫助!

using (var client = new HttpClient())
                {
                    joke = client.GetStringAsync(@"https://api.chucknorris.io/jokes/random").Result;
                    JObject result = JObject.Parse(joke);
                    foreach (var results in result)
                    {
                        string value = (string)result["value"];
                    } 
                    
                }
                MessageBox.Show(value);

提供的代碼存在一些問題(關於最佳實踐)。 以下最好調用API並獲得響應。

您需要創建一個類來將 json 反序列化為:

public class ChuckNorrisJoke {
    public string Icon_Url { get; set; }
    public string Id { get; set; }
    public string Url { get; set; }
    public string Value { get; set; }
}

然后您可以發送請求並反序列化響應:

private static HttpClient httpClient = new HttpClient();

var uri = new Uri("https://api.chucknorris.io/jokes/random");
var reqMessage = new HttpRequestMessage(HttpMethod.Get, uri);

var response = httpClient.SendAsync(reqMessage);
var responseContent = await response.Content.ReadAsStringAsync();
var chuckNorrisJoke = JsonConvert.DeserializeObject<ChuckNorrisJoke>(responseContent);

此代碼將調用您通過 GET 請求提供的端點。 獲取響應,讀取響應返回的內容,然后將響應中的json轉成ChuckNorrisJoke對象。

之后,您可以使用以下方法訪問笑話:

var joke = chuckNorrisJoke.Value;

首先創建一個 POCO 類,如:

public class Random
{
    public string[] categories { get; set; }
    public DateTime created_at { get; set; }
    public string icon_url { get; set; }
    public string Id { get; set; }
    public DateTime updated_at { get; set; }
    public string url { get; set; }
    public string value { get; set; }
}

然后使用 Newtonsoft.Json nutget pack 反序列化,您可以在類中添加靜態函數,這將返回一個 Random 對象類型:

public static Random deserialize(string res)
{
    return JsonConvert.DeserializeObject<Random>(res);
}

用於:

        using (var client = new HttpClient())
        {
            var joke = client.GetStringAsync(@"https://api.chucknorris.io/jokes/random").Result;


            var returnedObject = Random.deserialize(joke);
            string value = returnedObject.value;

            // Console.WriteLine(value);
            MessageBox.Show(value);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM