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

如何在JSON字符串反序列化前移除外层多余的data节点元素

解决方案

方案1:定义响应包装类(最推荐,可复用性最高)

你可以提前定义通用的接口响应包装类,适配所有外层带data的接口返回:

// 定义通用响应包装类
public class ApiResponse<T>
{
    public T data { get; set; }
}

修改单元测试的反序列化逻辑即可:

using (var client = new HttpClient())
{                          
    var response = await client.GetAsync("/Balance");
    var responseString = await response.Content.ReadAsStringAsync();

    // 直接反序列化到带包装的结构
    var apiResult = JsonConvert.DeserializeObject<ApiResponse<List<BalanceModelDto>>>(responseString);
    // 取data数组第一个元素做断言(可根据你的业务逻辑调整取值逻辑)
    var result = apiResult.data.FirstOrDefault();

    Assert.IsType<BalanceModelDto>(result);
    Assert.Equal(1, result.Balance);
}

方案2:用JObject动态解析(无需额外定义类,适合一次性使用场景)

如果你不想额外新增包装类,可以直接用Newtonsoft.Json提供的JObject解析后取data节点:

using (var client = new HttpClient())
{                          
    var response = await client.GetAsync("/Balance");
    var responseString = await response.Content.ReadAsStringAsync();

    // 解析为JObject后直接取data字段
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(responseString);
    var dataList = jObject["data"].ToObject<List<BalanceModelDto>>();
    var result = dataList.FirstOrDefault();

    Assert.IsType<BalanceModelDto>(result);
    Assert.Equal(1, result.Balance);
}

不推荐直接裁剪字符串的方式:如果后续接口返回结构调整、字段顺序变化,字符串裁剪逻辑很容易失效,容错率远低于JSON解析方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:04