c# - 将 JSON 转换为自己的类型会导致 null 对象
问题描述
从我的休息电话中,我收到了这个 JSON:
{
"livemode": true,
"error": {
"type": "unauthorized",
"message": "You did not provide a valid API key."
}
}
我需要将类型和消息提取到我的类型中:
public class TestObject
{
string type { get; set; }
string message { get; set; }
}
但这会返回空对象:
HttpClient client = new HttpClient();
Uri uri = new Uri("https://api.onlinebetaalplatform.nl/v1");
HttpResponseMessage response = await client.GetAsync(uri);
string content = await response.Content.ReadAsStringAsync();
JObject json = JObject.Parse(content);
TestObject album = json.ToObject<TestObject>();
1.) 我知道类型和消息属性是“嵌套的”。我如何访问它们?2.) 即使我调用我的类型 livemode 和错误,对象仍然返回 null。
你能帮帮我吗?
谢谢 :)
解决方案
许多人似乎有一组大括号。我很确定您正在查询的 api 没有返回第一个和最后一个大括号。处理完之后继续。
为了获取数据,添加这些类定义
public class Error
{
public string type { get; set; }
public string message { get; set; }
}
public class Root
{
public bool livemode { get; set; }
public Error error { get; set; }
}
和改变
TestObject album = json.ToObject<TestObject>();
至
Root album = json.ToObject<Root>();
正如对您的问题的一些评论所提到的,您当前正在尝试将 JSON 字符串转换为嵌套的 Error 对象,而不是 Error 对象所在的根对象。
将来会有一些工具可以从 JSON 生成 C# 类。这次我使用https://json2csharp.com/这样做。
编辑:我刚刚发现 Visual Studio 实际上有一个内置的 JSON to Class 功能!
推荐阅读
- css - 带有 React JS Div 和组件的全屏背景图像
- java - 单击时删除浮动操作按钮中使用的可绘制对象的背景(Android Studio)
- java - JUnit5 是否有类似的 ErrorCollector 规则
- javascript - 为什么我的 responseText 不能在 if 条件下工作(在其他地方工作)?
- javascript - JavaScript中带有逻辑AND运算符的多个条件
- regex - 为什么在正则表达式中“?括号后立即”是语法错误?
- solidity - 在合约内创建合约并通过 Web3 访问
- python - 版本升级后 S3F 收到 Access Denied
- java - 如何对包含多个字符串的字符串进行子串化
- python - 将 Python beautifulsoup 的 span 结果连接成字符串