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

向C# MVC API提交复杂数组时模型列表接收为空的问题排查

问题分析与解决方案

看起来你的问题核心是JSON反序列化失败,导致后端用List<teachersExcelDataModel>接收时为空,但用object[]能正常接收。下面一步步拆解原因和解决办法:

1. 值类型字段的null不匹配问题

你的模型里schoolNumber是int类型(值类型),但前端发送的JSON里schoolNumber是null:

"schoolNumber":null

值类型int不能存储null,JSON反序列化器遇到这种情况会直接失败,导致整个对象无法被解析,最终整个List就变成空的了。而object[]可以接收是因为object可以容纳null值,不会触发反序列化错误。

解决办法:把模型里的int类型改成可空的int?:

public int? schoolNumber { get; set; }

同理,检查其他值类型字段(比如Thursday1、Friday1这些),如果前端可能发送非数字或者null的情况,也要考虑是否改成可空类型。

2. 检查JSON格式是否完整

你提供的JSON内容里,第二个对象是不完整的(最后没有闭合的}和数组的]):

{"id":"201669887","name":"חנה",......,"th":["",......,""]

实际前端发送时如果JSON格式不完整,也会导致反序列化失败。务必确保JSON.stringify(this.sendData)生成的是完整、合法的JSON字符串。

3. 确认请求头的Content-Type设置

前端发送POST请求时,必须把Content-Type设置为application/json,否则后端的[FromBody]无法正确解析JSON数据。检查你的this.headers是否包含:

this.headers = new HttpHeaders().set('Content-Type', 'application/json');

如果缺少这个头,ASP.NET MVC会无法识别请求体里的JSON,导致List<teachersExcelDataModel>接收为空。

4. 排查反序列化异常(可选)

如果上面的步骤都做了还是有问题,可以在后端加日志或者捕获反序列化的异常,具体看看哪里出错了。比如用System.Text.Json的话,可以这样调试:

using System.Text.Json;

public void PostExportExcel([FromBody] string rawJson)
{
    try
    {
        var json = JsonSerializer.Deserialize<List<teachersExcelDataModel>>(rawJson);
        // 后续处理逻辑
    }
    catch (JsonException ex)
    {
        // 这里打印异常信息,就能看到具体的反序列化错误
        Console.WriteLine(ex.Message);
    }
}

这样就能精准定位到JSON和模型不匹配的地方。


内容的提问来源于stack exchange,提问作者אסתר

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:59:44