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

.NET 6控制器接收List<Word>集合参数时JSON转换失败及必填字段错误问题排查与解决

.NET 6控制器接收List集合参数时JSON转换失败及必填字段错误问题排查与解决

嘿,我来帮你梳理下这个问题,你遇到的两个错误其实是同一个根源导致的,咱们一步步拆解解决:

问题原因分析

  1. JSON格式与参数类型不匹配
    你的控制器方法里用[FromBody]修饰的是List<Word>类型,这意味着ASP.NET Core期望请求体直接是一个JSON数组。但你在Postman里传的是一个包含wordList键的JSON对象,框架无法把外层的对象转换成List<Word>类型,所以抛出了The JSON value could not be converted to System.Collections.Generic.List1[EnglishStudy.Entity.Word]`的错误。

  2. 必填字段误报
    因为框架没从请求体里正确解析到wordList参数(它期望直接接收数组,而不是带键的对象),所以误以为这个参数缺失,进而报出The wordList field is required.的错误。

解决方法(两种可选方案)

方案一:修改Postman请求体为直接数组(推荐)

既然你的方法参数定义就是接收List<Word>,那直接把请求体改成纯数组格式即可,不需要外层的wordList键:

[
  {
    "words": "a",
    "phonetic": "a",
    "paraphrase": " art.一(个) 每一(个)"
  }
]

发送这个请求后,框架就能自动把JSON数组转换成List<Word>对象,正确绑定到方法参数上。

方案二:用DTO类包裹集合(保持原有请求体结构)

如果你需要保留当前的请求体格式(外层带wordList键),可以创建一个DTO类来封装这个集合:

// 新增的DTO类
namespace EnglishStudy.Entity
{
    public class WordListRequest
    {
        public List<Word> WordList { get; set; }
    }
}

然后修改控制器方法的参数类型:

[HttpPost("addlist/{type}")]
public Result AddWord([FromBody] WordListRequest request, int type = 1)
{
    var count = wordService.AddWord(request.WordList, type);
    return result.Ok(count);
}

这样Postman原来的JSON格式就能被正确解析,request.WordList就能拿到你传入的集合数据。

额外小提示

注意到你的Word类属性是首字母大写的(比如Words),而JSON里用的是小写键(比如words)。虽然ASP.NET Core 6默认的JSON序列化配置是不区分大小写的,但如果之后遇到属性绑定不上的情况,可以手动在Program.cs里明确配置:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 开启属性名称不区分大小写匹配
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
    });

备注:内容来源于stack exchange,提问作者大白兔

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:18:02