【问题标题】:C# JSON Parsing result seems to be nullC# JSON 解析结果似乎为空
【发布时间】:2020-12-30 19:21:14
【问题描述】:

我目前正在制作一个使用 Advice API 的简单程序。这个想法是,当有人按下按钮时,会出现一串建议。但是,我有一个问题,我可以打印原始 JSON 响应,但不能打印单个建议字符串本身。

标签仅用于调试目的。

任何帮助将不胜感激! :)

public void Search_Click(object sender, EventArgs e)
{
    HttpClient client = new HttpClient();
    HttpResponseMessage response = client.GetAsync(apiURL).Result;
    string rawtext = response.Content.ReadAsStringAsync().Result;

    label2.Text = rawtext;

    Todo todo = JsonConvert.DeserializeObject<Todo>(rawtext);

    label1.Text = todo.advice;
}

public class Todo
{
    public int id { get; set; }
    public string advice { get; set; }
}

JSON:

{"slip": { "id": 101, "advice": "Alway do anything for love, but don't do that."}}

【问题讨论】:

  • 请出示json。
  • 注意:HttpClient 旨在为每个应用程序实例化一次,而不是每次使用。
  • JSON 已添加

标签: c# json parsing


【解决方案1】:

你需要一个关于 json 结构的容器类。我还修复了一些 HttpClient 使用错误。

private static HttpClient client = new HttpClient();

public async void Search_Click(object sender, EventArgs e)
{
    using (HttpResponseMessage response = await client.GetAsync(apiURL))
    {
        string rawtext = await response.Content.ReadAsStringAsync();
        
        label2.Text = rawtext;

        if (response.IsSuccessStatusCode)
        {
            Todo todo = JsonConvert.DeserializeObject<Slip>(rawtext).slip;

            label1.Text = todo.advice;
        }
    }
}

public class Slip
{
    public Todo slip { get; set; }
}

public class Todo
{
    public int id { get; set; }
    public string advice { get; set; }
}

【讨论】:

  • @Moseph 建议:现在方法是async,这意味着 UI 将在数据加载时响应(这是一件好事)。为防止在按钮执行其代码时单击两次,请在开始时禁用按钮并在方法结束时启用。
【解决方案2】:

ToDo 嵌套在slip 中,所以你需要一个父类。

Slip slip = JsonConvert.DeserializeObject<Slip>(rawtext);

public class Slip
{
    public Todo slip { get; set; }
}

public class Todo
{
    public int id { get; set; }
    public string advice { get; set; }
}

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多