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

ASP.NET Core Web API返回对象时List类型属性丢失问题求助

问题原因与解决方案

核心原因是ASP.NET Core默认的JSON序列化器(System.Text.Json)默认只序列化带有get/set的属性,不会序列化普通字段。你的EmployeeViewModel里EmployeeContacts是无访问器的字段,返回时被序列化器忽略,导致客户端看不到该列表。

解决方法(任选其一即可)

1. 将字段改为属性(推荐)

把EmployeeContacts改成带get/set的属性,这是.NET模型的标准写法,序列化器会自动识别:

public class EmployeeViewModel
{
    public List<EmployeeContactViewModel> EmployeeContacts { get; set; }

    public EmployeeViewModel()
    {
        EmployeeContacts = new List<EmployeeContactViewModel>();
    }

    public string EmployeeId { get; set; }
    public string EmployeeName { get; set; }
    // more fields
}

2. 全局配置序列化器包含字段

如果不想修改模型结构,可以在项目配置(比如Program.cs)中设置序列化器包含所有字段:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IncludeFields = true;
    });

3. 单独给字段添加序列化特性

给EmployeeContacts字段加上[JsonInclude]特性,指定该字段需要被序列化:

using System.Text.Json.Serialization; // 需要引入此命名空间

public class EmployeeViewModel
{
    [JsonInclude]
    public List<EmployeeContactViewModel> EmployeeContacts;

    public EmployeeViewModel()
    {
        EmployeeContacts = new List<EmployeeContactViewModel>();
    }

    public string EmployeeId { get; set; }
    public string EmployeeName { get; set; }
    // more fields
}

额外注意事项

  • 检查EmployeeContactViewModel的成员是否也是字段而非属性,如果是,同样会出现序列化丢失的问题,需要同步处理。
  • 你的填充方法存在笔误:第二个CopyContactFields(contact1, contactVm2)应该传入contact2作为参数,否则第二个联系人会复制第一个的数据,虽然这不是列表丢失的原因,但会导致数据错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:37