如何使用Automaper处理无效日期

问题描述 投票:0回答:1

因此,我有一个源db列,其日期类型为字符串,而不是日期,因此,您可能会偶尔遇到无效的日期,例如“ 10-31-”。该源超出了我的控制范围,因此无法在那里进行修复(添加验证)。我使用的是automaper(版本9),并且我一直在尝试使用.MapFrom,但老实说,我对Automapper相当陌生,对我在做什么并不了解。我已经阅读了文档,但对我没有帮助。

目标日期列是可为空的,因此,如果字符串不能转换为日期,我想得到一个空值。

CreateMap<Models.Orders, DTO.Orders>()
.ForMember(dest => dest.ap_birthday, opt => opt.AllowNull() );
c# datetime automapper-9
1个回答
0
投票

您可以通过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

© www.soinside.com 2019 - 2024. All rights reserved.