.NET 6 Web Api中JSON反序列化为对象失败求助
解决.NET 6.0 Web API中JSON反序列化不匹配问题
问题核心在于你的类结构与返回的JSON格式完全不匹配,导致反序列化失败:
1. 明确JSON结构
返回的JSON是一个顶层对象,包含一个名为tokens的属性,属性值是字符串数组:
{"tokens":["6856","d70f1","c66b","45b","3090","8ac68","fsf28"]}
2. 现有尝试失败的原因
- 使用
JsonConvert.DeserializeObject<Tokens>(x)返回null:你的Tokens类只定义了Token字符串属性,但JSON中没有对应字段,只有tokens数组,无法匹配映射。 - 使用
JsonConvert.DeserializeObject<List<Tokens>>(x)报错:JSON是对象类型,而你试图反序列化为数组/集合类型,类型不匹配触发错误。
3. 正确解决方案
方案一:定义匹配JSON结构的类
创建与JSON结构完全对应的类,属性名需和JSON中的tokens一致(大小写敏感,可通过特性配置忽略):
public class TokenResponse { public List<string> Tokens { get; set; } }
使用该类完成反序列化:
string jsonContent = "{\"tokens\":[\"6856\",\"d70f1\",\"c66b\",\"45b\",\"3090\",\"8ac68\",\"fsf28\"]}"; var response = JsonConvert.DeserializeObject<TokenResponse>(jsonContent); // 访问结果中的tokens数组:response.Tokens
方案二:映射到你原有的Tokens类
如果需要将每个字符串转换为Tokens对象,可先反序列化为上述TokenResponse,再通过LINQ转换:
var tokenObjects = response.Tokens.Select(tokenStr => new Tokens { Token = tokenStr }).ToList();
补充:属性名不一致的处理
若JSON属性名与类属性名大小写不同(比如JSON是tokens,类想用TokenList),可通过JsonProperty特性指定映射:
public class TokenResponse { [JsonProperty("tokens")] public List<string> TokenList { get; set; } }
内容的提问来源于stack exchange,提问作者Jet813
相关产品推荐
相关产品推荐

