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

JSON数组反序列化失败致NUnit断言出错的技术求助

解决JSON数组反序列化失败问题

问题根源

API返回的JSON是数组类型(包含多个用户对象),但你的代码尝试将其反序列化为单个UserDto对象,这不符合JSON结构与目标类型的匹配要求,因此抛出序列化异常。

解决方案步骤

1. 统一DTO类命名(规范优化)

确保DTO类名与代码中使用的UserDto一致,修正后的类:

public class UserDto
{
    public string id { get; set; }
    public string fid { get; set; }
    public List<string> pids { get; set; }
}

2. 修改GetUsers方法的反序列化逻辑

将反序列化目标类型从单个UserDto改为集合类型List<UserDto>,同时调整方法返回类型:

public List<UserDto> GetUsers()
{
    var client = new RestClient("xyz.com");
    var request = new RestRequest("/api/test", Method.GET);
    request.AddHeader("Accept", "application/json");
    request.RequestFormat = DataFormat.Json;
    
    IRestResponse response = client.Execute(request);
    var content = response.Content;
    
    // 反序列化为用户集合而非单个对象
    List<UserDto> userList = JsonConvert.DeserializeObject<List<UserDto>>(content);
    return userList;
}

3. 修正测试代码的断言逻辑

现在GetUsers返回的是用户集合,需先取集合元素再访问fid:

[Test]
public void VerifyWorkspaceId()
{
    var api = new ServiceTests();
    var response = api.GetUsers();
    
    // 断言第一个用户的fid为"6556"
    Assert.AreEqual("6556", response[0].fid);
}

额外说明

如果API返回的确实是数组结构,上述修改即可解决问题。若后续需强制某个类从数组反序列化,也可给类添加[JsonArray]特性,但此场景下直接使用集合类型是更合理的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:55:20