使用RestSharp调用DBD角色API返回Null,如何排查问题?
问题排查与解决
1. API响应结构不匹配是核心原因
访问https://dbd.tricky.lol/api/characters?id=Chuckles实际返回的是包含单个对象的数组(格式示例:[{"_id":123,"name":"Chuckles",...}]),但你用GetJsonAsync<Killers>试图反序列化为单个对象,RestSharp无法将数组映射到单个对象,因此返回null。
2. 模型定义存在错误
- 字段类型不匹配:API返回的
tunables是一个对象数组(而非字符串),你模型中定义为string,会导致反序列化失败。 - 类结构不完整:你只给出了类的属性,但类本身需要是
public访问级别,且命名应对应单个角色(比如Killer而非Killers)。
修复步骤
第一步:修正模型类
根据API实际返回结构,定义正确的模型:
public class Killer { public int _id { get; set; } public string name { get; set; } public string gender { get; set; } // tunables实际是数组,改为对应类型 public List<Tunable> tunables { get; set; } public string difficulty { get; set; } public string height { get; set; } } public class Tunable { // 根据API返回的tunables字段结构补充属性,例如: public string name { get; set; } public string value { get; set; } }
第二步:修改API调用代码
将反序列化目标改为数组或列表类型:
var options = new RestClientOptions("https://dbd.tricky.lol/api"); var client = new RestClient(options); // 反序列化为List<Killer>或Killer[] var response = await client.GetJsonAsync<List<Killer>>("characters?id=Chuckles"); // 取第一个元素作为目标角色 var targetKiller = response?.FirstOrDefault();
额外验证:检查异步上下文
确保调用代码在标记为async的方法中执行,否则await会导致编译错误或运行时异常。
内容的提问来源于stack exchange,提问作者Herbix
相关产品推荐
相关产品推荐

