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
相关产品推荐
相关产品推荐

