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
相关产品推荐
相关产品推荐

