首页 > 解决方案 > 将 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。

你能帮帮我吗?

谢谢 :)

标签: c#json

解决方案


许多人似乎有一组大括号。我很确定您正在查询的 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 功能!

JSON 到 csharp


推荐阅读