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

ASP.NET Core Web API返回JSON时ListOfRequiredInputs字段缺失

问题根因
  • ASP.NET Core 默认使用的 System.Text.Json 序列化器默认仅序列化类的公有属性,不会处理公有字段。你定义的 ListOfRequiredInputs 是类的公有字段,不是属性,因此序列化阶段直接被忽略。
  • 你的列表元素追加逻辑写法错误:List<T>.Append() 是 LINQ 扩展方法,不会修改原列表实例,只会返回追加元素后的新 IEnumerable<T> 序列,你调用后没有接收返回值,原列表始终是空的,就算配置了序列化字段也拿不到你添加的"Dom"元素。
修复步骤
  1. 将ListOfRequiredInputs从公有字段改为公有自动属性,与CalObj的写法保持一致,直接在属性定义处初始化空列表即可。
  2. 将错误的Append()调用替换为List<T>原生的Add()方法,直接修改原列表实例完成元素追加。

修正后的完整代码如下:

[Route("/Calculators/{id}")]
[HttpGet("{id}")]       
public CalcRequiredInputs Get(int id)
{    
    using (var context = new PiContext())
    {
        var calReqIn = new CalcRequiredInputs();
        // 冗余的ToList()可以去掉,一次ToList()就已经拿到内存列表了
        calReqIn.CalObj  = context.TaskCalculators.Where(e => e.Id == id).ToList();
        // 使用Add方法直接向原列表追加元素
        calReqIn.ListOfRequiredInputs.Add("Dom");
        return calReqIn;
    }
}

public class CalcRequiredInputs
{        
    // 改为公有属性,自动初始化空列表
    public List<string> ListOfRequiredInputs { get; set; } = new List<string>();
    public List<Calculator>? CalObj { get; set; }
}

public class Calculator
{
    public int Id { get; set; }
    public string CalculatorName { get; set; } = null!;
}
特殊场景配置(可选)

如果你因为特殊业务需求必须保留字段写法、不想改成属性,可以在Program.cs中配置JSON序列化规则,开启公有字段序列化支持:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 开启公有字段序列化
        options.JsonSerializerOptions.IncludeFields = true;
    });

注意:就算开启了字段序列化配置,你原来的Append()写法依然是错误的,必须替换为Add(),否则列表始终为空。

修复后接口返回的JSON结构会正常包含两个字段,示例如下:

{
  "listOfRequiredInputs": ["Dom"],
  "calObj": [{"id":1,"calculatorName":"M2"}]
}

内容的提问来源于stack exchange,提问作者Doctor J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:21:19