C# JSON 解析结果似乎为空
Posted
技术标签:
【中文标题】C# JSON 解析结果似乎为空【英文标题】:C# JSON Parsing result seems to be null 【发布时间】: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 已添加
【参考方案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;
【讨论】:
以上是关于C# JSON 解析结果似乎为空的主要内容,如果未能解决你的问题,请参考以下文章