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

C# 如何使用Json(C)从URL API检索字符串值?,c#,json,C#,Json,你好,各位大师 我试图使用JSON从API中检索一个随机的Chuck Norris笑话,但我不确定如何检索URL上的字符串值。这是我正在使用的,但我感到迷路了! 谢谢你的帮助 using (var client = new HttpClient()) { joke = client.GetStringAsync(@"https://api.chucknorris.io/jokes/random").Res

你好,各位大师

我试图使用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);

首先创建一个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反序列化,您可以在类中添加静态函数,这将返回一个随机对象类型:

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

响应是什么样子的?它看起来是这样的:{icon_url:,id:RIZzu8oNT1yAT-JwEe7kDg,url:,value:Chuck Norris hungers只为了复仇。}
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);
        }