因此,我有一个源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
[C0行告诉AutoMapper每次需要从cfg.CreateMap<string, DateTime?>()...
转换为string
时都使用此转换器。
或者,您也可以使用DateTime?
。