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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31