【问题标题】:How to Deserialize nested JSON into C# objects [closed]如何将嵌套的 JSON 反序列化为 C# 对象 [关闭]
【发布时间】:2022-01-20 19:42:28
【问题描述】:

我有这个 Json 字符串,我一直在尝试对其进行反序列化,尝试了以下方法:

string jsonS = @"{
  "version": "1.0.0",
  "network": {
    "id": "ZA-CS2SPT1AJ9ESP"
  },
  "request": {
    "id": "7b4addca-3bb3-4cc6-adb8-e42114867cab"
  },
  "data": {
    "message": "Authentication Success",
    "access": {
      "token": "4e78daef-c308-4d13-9e18-ab4c80b08a55",
      "expires": 3600
    },
    "refresh": {
      "token": "741138cf-9aac-4a76-baa2-b568b98b8880",
      "expires": 2592000
    }
  }
}";

使用以下内容创建了一个类:

class SiliconAuth
{
    public string version { get; set; }
    public network network { get; set; }
    public request request { get; set; }
    public data data { get; set; }
    public refresh refresh { get; set; }
}

public class network
{
    public string id { get; set; }
}

public class request
{
    public string id { get; set; }
}

public class data
{
    public string message { get; set; }
    public access access { get; set; }
}

public class access
{
    public string token { get; set; }
    public int expire { get; set; }
}

public class refresh
{
    public string token { get; set; }
    public int expire { get; set; }
}

并从数据中运行以下预期数据对象:

var data = JsonConvert.DeserializeObject<SiliconAuth>(jsonS);

但我返回一个空值,任何帮助将不胜感激。

【问题讨论】:

  • 这种格式很难阅读,但看起来刷新是数据的属性
  • @Crowcoder 修复了格式
  • 与问题没有直接关系,但如果您正在对 jsons 进行脱盐处理,则非常有用。有一个 VS 内置工具,可以从 json 本身生成您的类,它有点隐藏在扩展中,请参阅 @987654321 @
  • 有一些工具可以帮助从 json 生成 C# 类。例如json2csharp.comapp.quicktype.io

标签: c# json .net json.net


【解决方案1】:

您的 JSON 或类属性中有一些拼写错误。在您使用的 JSON 中:expire 和在类中:expires

您应该更改 JSON 或类属性。

编辑
感谢@Rafal 指出这一点:
您应该确保您的 JSON-Structure 和您的类结构是相同的。例如,您有 refresh 属性 int JSON 作为 data 的子级,但在您的类中,它的属性是 SiliconAuth

【讨论】:

  • 刷新也应该在数据类中而不是 SiliconAuth
  • 确实如此。我会添加它
【解决方案2】:

你有一个错误的根类,刷新应该在数据内部,不在根中

  public class SiliconAuth
    {
        public string version { get; set; }
        public Network network { get; set; }
        public Request request { get; set; }
        public Data data { get; set; }
    }

另一个类

 public class Network
    {
        public string id { get; set; }
    }

    public class Request
    {
        public string id { get; set; }
    }

    public class Access
    {
        public string token { get; set; }
        public int expires { get; set; }
    }

    public class Refresh
    {
        public string token { get; set; }
        public int expires { get; set; }
    }

    public class Data
    {
        public string message { get; set; }
        public Access access { get; set; }
        public Refresh refresh { get; set; }
    }

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2017-10-29
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多