Этого можно добиться с помощью преобразователя типов , например:
public class DateTimeTypeConverter : ITypeConverter<string, DateTime?>
{
public DateTime? Convert(string source, DateTime? destination, ResolutionContext context)
{
if (DateTime.TryParse(source, out DateTime result))
return result;
return null;
}
}
Это всего лишь пример возможного преобразователя типов. Когда строка была успешно проанализирована, вы получите результат DateTime
, в противном случае будет возвращено null
. Конечно, вы можете настроить конвертацию в соответствии со своими потребностями.
Затем вы используете конвертер так:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<string, DateTime?>().ConvertUsing(new DateTimeTypeConverter());
cfg.CreateMap<OrderDto, Order>();
});
var mapper = config.CreateMapper();
var orderDTO = new OrderDto();
orderDTO.id = 1;
orderDTO.orderDate = "2020-01-01";
var order = mapper.Map<Order>(orderDTO); // orderDate will be "2020-01-01"
orderDTO.orderDate = "10-31";
var otherorder = mapper.Map<Order>(orderDTO); // orderDate will be null
Строка cfg.CreateMap<string, DateTime?>()...
указывает AutoMapper использовать этот конвертер каждый раз, когда это необходимо для преобразования из string
в DateTime?
.
В качестве альтернативы вы также можете использовать преобразователь значений .