因此,我有一个源db列,其日期类型为字符串,而不是日期,因此,您可能会偶尔遇到无效的日期,例如“ 10-31-”。该源超出了我的控制范围,因此无法在那里进行修复(添加验证)。我使用的是automaper(版本9),并且我一直在尝试使用.MapFrom,但老实说,我对Automapper相当陌生,对我在做什么并不了解。我已经阅读了文档,但对我没有帮助。
目标日期列是可为空的,因此,如果字符串不能转换为日期,我想得到一个空值。
CreateMap<Models.Orders, DTO.Orders>()
.ForMember(dest => dest.ap_birthday, opt => opt.AllowNull() );
您可以通过type converter实现此目标,例如:
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
或者,您也可以使用value converter。