AutoMapper: преобразование типа для одного свойства
Я использую следующие два класса для Entity и DTO:
public class VehicleEntity {
public int Id { get; set; }
public string AddressNumber { get; set; }
public string VehicleNumber { get; set; }
public string Brand { get; set; }
public string NumberPlacesStr { get; set; }
}
public class VehicleDto {
public int Id { get; set; }
public string AddressNumber { get; set; }
public string VehicleNumber { get; set; }
public string Brand { get; set; }
public int NumberPlaces { get; set; }
}
Для отображения я используюAutoMapper
нравиться
configuration.CreateMap<VehicleEnity, VehicleDto>()
Это отлично работает. Но собственностьNumberPlacesStr
этоstring
вVehicleEntity
и должен быть сопоставлен сint
свойствоNumberPlaces
вVehicleDTO
. Как я могу настроить эту специальность?
1 ответ
Использовать.ForMember()
путем указания исходного и целевого свойств. Automapper будет обрабатывать кастинг изstring
к .
configuration.CreateMap<VehicleEntity, VehicleDto>()
.ForMember(dest => dest.NumberPlaces, opt => opt.MapFrom(src => src.NumberPlacesStr));
Однако описанный выше подход может работать некорректно, еслиNumberPlacesStr
не может быть использован какint
.
Вы можете рассмотреть возможность использования Custom Value Resolver для безопасного сопоставления и преобразования.
public class VehicleNumberPlacesResolver : IValueResolver<VehicleEntity, VehicleDto, int>
{
public int Resolve(VehicleEntity source, VehicleDto destination, int member, ResolutionContext context)
{
try
{
return Int32.Parse(source.NumberPlacesStr);
}
catch
{
return default;
}
}
}
configuration.CreateMap<VehicleEntity, VehicleDto>()
.ForMember(dest => dest.NumberPlaces, opt => opt.MapFrom<VehicleNumberPlacesResolver>());
Рекомендации