Ошибка: 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 шт):

Автор решения: aepot

Ошибка говорит сама за себя, давайте переведу на русский

Каждый параметр в конструкторе '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;
}
→ Ссылка