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>());

Пример скрипта .NET


Рекомендации

Проекция — AutoMapper

Преобразователи пользовательских значений — AutoMapper

Другие вопросы по тегам