.NET ICollection反序列化失败:Angular请求Payload问题排查
问题描述
我在C#中有一个模型,包含集合属性:
public virtual ICollection<Salary> Salaries { get; set; }
在Angular中,我尝试这样发送数据:
const salary: SalaryModel = { clientId: 1, profileId: this.profile.id, amount: this.salary.value, startDate: new Date(), endDate: null, } this.profileForm.patchValue({ salaries: salary});
其中profileForm的salaries字段定义如下:
this.profileForm = this.fb.group({ salaries: [], })
当发起API请求时,返回错误:
Cannot deserialize the current JSON object (e.g. {"name":"value"})
Payload内容为单个Salary对象(原截图显示的是一个对象而非数组)。我未发现Payload存在问题,请问有人知道原因吗?
解决方案
问题核心是前后端数据类型不匹配:
- C#后端的
Salaries是ICollection<Salary>集合类型,期望接收的是JSON数组(用[]包裹的对象集合) - 你在Angular中给
salaries字段赋值的是单个Salary对象,而非数组,后端自然无法把单个对象反序列化为集合类型
直接修正赋值逻辑,把单个对象包装成数组即可:
// 将单个salary放入数组中 this.profileForm.patchValue({ salaries: [salary]});
如果后续需要动态添加多个薪资条目,建议用Angular的FormArray来定义表单字段,更符合集合类型的表单处理规范:
this.profileForm = this.fb.group({ salaries: this.fb.array([]) })
内容的提问来源于stack exchange,提问作者Jesus
相关产品推荐
相关产品推荐

