我正在尝试发送数据以将其保存在我的数据库中,基本,所以我将模型发送到我的控制器,然后出现此错误:
“类型“SmgApi.Models.Dto.EquipementDto”上的构造函数“Void .ctor(SmgApi.Models.Entity.EquipmentEntity)”中的每个参数都必须绑定到反序列化时的对象属性或字段。每个参数名称必须与属性或字段匹配对象上的字段。匹配可以不区分大小写。”
但我不反序列化任何东西,我不明白。我的控制器:
[HttpPost]
public async Task<IActionResult> UpdateEquipment(EquipementDto equipment)
{
return Ok(await _equipmentRepository.UpdateEquipment(new EquipmentEntity(equipment)));
}
Run Code Online (Sandbox Code Playgroud)
设备D至:
public class EquipementDto
{
[Required]
public string Id { get; set; }
public List<PropertyDto> Properties { get; set; }
[Required]
public string Type { get; set; }
public bool isInPalette { get; set; }
public EquipementDto(EquipmentEntity equipment)
{
if (equipment == null)
return;
this.Id = equipment.Id;
this.Type = equipment.Type;
this.isInPalette = equipment.IsInPalette;
this.Properties = equipment.Properties.Select(x => new PropertyDto(x)).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
我的装备界面在前面:
export interface Equipment {
id: string;
type: Type;
isInPalette: boolean;
properties: Array<Property>;
}
Run Code Online (Sandbox Code Playgroud)
我的请求:
private equipmentUrl: string = environment.apiUrl + '/equipment';
constructor(private http: HttpClient) {}
public saveEquipment(equipment: Equipment): Observable<Equipment> {
return this.http.post<Equipment>(this.equipmentUrl, equipment);
}
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么有什么想法吗?
小智 55
但我不反序列化任何东西,我不明白。
您可能不会直接执行此操作,但您肯定会要求框架为您反序列化某些内容:
[HttpPost]
public async Task<IActionResult> UpdateEquipment(EquipementDto equipment)
Run Code Online (Sandbox Code Playgroud)
在这里,您告诉框架您希望调用包含表示与您匹配的对象的序列化 json 字符串,EquipementDto
并请为您将该字符串反序列化为 的实际实例EquipementDto
并将其传递给该方法。
现在我们已经确定了反序列化发生的位置,我们可以看看发生了什么。在反序列化过程中,执行反序列化的框架需要能够构造您想要反序列化的对象。
为了能够构造该对象,它需要一个有效的构造函数。看起来它会接受两种类型的构造函数:
您EquipementDto
只有 1 个构造函数,并且该构造函数需要一些EquipmentEntity
反序列化框架一无所知的未知数。
现在我不完全确定,但我认为只需在EquipementDto
类中添加无参数构造函数即可解决此问题:
[JsonConstructor]
public EquipementDto(){}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44147 次 |
最近记录: |