You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JsonConvert.DeserializeObject时如何避免定义JSON对象根类

避免为每个API响应定义专属Root类的方法

问题场景

调用第三方API时,所有响应都遵循同一格式:外层是一个唯一键,对应内部的特定业务对象或数组。每次都要为响应单独定义Root类,操作繁琐,希望找到通用方案。

示例1:Token响应

JSON结构:

{
    "token": {
        "accessToken": "scrciFyGuLAQn6XgKkaBWOxdZA1",
        "issuedAt": "2022-11-06T22:54:27Z",
        "expiresIn": 1799
    }
}

原有实现(需定义Root类):

public class Root
{
    public Token Token { get; set; }
}

public class Token
{
    public string AccessToken { get; set; }
    public DateTime IssuedAt { get; set; }
    public int ExpiresIn { get; set; }
}

反序列化调用:

Root myRoot = JsonConvert.DeserializeObject<Root>(apiResponse);

示例2:User响应

JSON结构:

{
  "user": {
    "preferences": {},
    "address": {},
    "name": {},
    "email": "string",
    "segmentName": "string"
  }
}

原有实现(需定义Root类):

public class Address
{
}

public class Name
{
}

public class Preferences
{
}

public class Root
{
    public User user { get; set; }
}

public class User
{
    public Preferences preferences { get; set; }
    public Address address { get; set; }
    public Name name { get; set; }
    public string email { get; set; }
    public string segmentName { get; set; }
}

补充响应示例

11月14日补充:单个Provider响应

{
  "provider": {
    "TOTAL": {
      "count": 0
    }
  }
}

11月15日补充:Provider数组响应

{
    "provider": [
        {
            "accountType": [],
            "loginHelp": "string",
            "baseUrl": "string",
            "loginUrl": "string",
            "name": "string",
            "id": 0,
            "lastModified": "string",
            "status": "Supported"
        }
    ]
}

通用解决方案

无需定义任何Root类,直接使用Dictionary<string, T>进行反序列化,其中T为实际业务对象类型(或集合类型):

1. 单一对象场景

针对返回单个业务对象的响应,指定Dictionary<string, 业务对象类型>,再通过键名取出目标对象:

// Token示例
Token token = JsonConvert.DeserializeObject<Dictionary<string, Token>>(apiResponse)["token"];

// User示例
User user = JsonConvert.DeserializeObject<Dictionary<string, User>>(apiResponse)["user"];

// 单个Provider示例
Provider provider = JsonConvert.DeserializeObject<Dictionary<string, Provider>>(apiResponse)["provider"];

2. 数组/集合场景

针对返回数组的响应,将T指定为List<业务对象类型>:

List<Provider> providers = JsonConvert.DeserializeObject<Dictionary<string, List<Provider>>>(apiResponse)["provider"];

内容的提问来源于stack exchange,提问作者SiBrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:10:24