Ошибка: Each parameter in constructor must bind to an object property or field on deserialization
в Controller есть этот метод, когда делаю запрос с swagger а
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"country": {
"id": "Ru",
"name": "dfd",
"phoneIndex": "+998",
"status": 1,
"createdDate": "2021-05-07T10:58:35.278Z",
"modifiedDate": "2021-05-07T10:58:35.278Z"
},
"name": "dfdf"
}
выдает такую ошибку
Each parameter in constructor 'Void .ctor(System.String, System.String, System.String, ProwyLawyersTrading.Core.Models.Enum.CountryStatusEnum, System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' on type 'ProwyLawyersTrading.Core.Models.Country' must bind to an object property or field on deserialization. Each parameter name must match with a property or field on the object. The match can be case-insensitive.
[HttpPost]
[ProducesResponseType(statusCode: (int)HttpStatusCode.OK)]
[ProducesResponseType(type: typeof(IResponse.Failed), statusCode: (int)HttpStatusCode.BadRequest)]
public async Task<Response<Guid>> PutRegion([FromBody] PutRegionRequest region)
{
Guid id = await _dictionaryService.PutRegion(region.AsDomain());
return new Response<Guid>(id);
}
Model PutRegionRequest
public class PutRegionRequest
{
public Guid? Id { get; set; }
public Country Country { get; set; }
public string Name { get; set; }
public Region AsDomain()
{
var nowDateTime = DateTime.Now;
var region = new Region(Id.Value, Country, Name, nowDateTime, nowDateTime);
return region;
}
}
Model Region
public class Region : IId<Guid>
{
public Region(Guid id, Country country, string description, DateTime? createDate, DateTime? modifiedDate)
{
Id = id;
Country = country;
Name = description;
CreatedDate = createDate;
ModifiedDate = modifiedDate;
}
public Guid Id { get; set; }
public Country Country { get; set; }
public string Name { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }
}
public class Country : IId<string>
{
public Country(string id, string name, string phoneIndex, CountryStatusEnum status, DateTime? createDate, DateTime? modifiedDate)
{
Id = id;
PhoneIndex = phoneIndex;
Status = status;
CreatedDate = createDate;
ModifiedDate = modifiedDate;
Name = name;
}
public string Id { get; set; }
public string Name { get; set; }
public string PhoneIndex { get; set; }
public CountryStatusEnum Status { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }
}
Ответы (1 шт):
Ошибка говорит сама за себя, давайте переведу на русский
Каждый параметр в конструкторе 'Void .ctor(System.String, System.String, System.String, ProwyLawyersTrading.Core.Models.Enum.CountryStatusEnum, System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' типа 'ProwyLawyersTrading.Core.Models.Country' должен соответствовать свойству или полю при десереализации. Имя каждого аргумента должно соответствовать свойству или полю объекта. Соответствие может быть регистро-независимым.
Проверяем:
Берём свойства у класса Country, на который указывает исключение
Id Name PhoneIndex Status CreatedDate ModifiedDate
И сверяем с аргументами
id name phoneIndex status createDate modifiedDate
Вы уже видите ошибку? Если нет, то вот решение:
public Country(string id, string name, string phoneIndex, CountryStatusEnum status, DateTime? createdDate, DateTime? modifiedDate)
{
Id = id;
PhoneIndex = phoneIndex;
Status = status;
CreatedDate = createdDate;
ModifiedDate = modifiedDate;
Name = name;
}