首页 > 解决方案 > 在 Automapper 中处理多种日期格式

问题描述

例如,假设我们有一个源类型:

public class Source
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public string Value3 { get; set; }
}

我们想将其映射到:

public class Destination
{
    public DateTime Value1 { get; set; }
    public DateTime Value2 { get; set; }
    public DateTime Value3 { get; set; }
}

每个值都使用不同的日期格式进行转换。

CreateMap<string, DateTime>().ConvertUsing(new DateTimeConverter1());
CreateMap<string, DateTime>().ConvertUsing(new DateTimeConverter2());
CreateMap<string, DateTime>().ConvertUsing(new DateTimeConverter3());

CreateMap<DateTime, string>().ConvertUsing(dt => dt.ToString(DateStringAttribute.DateFormatString1));
CreateMap<DateTime, string>().ConvertUsing(dt => dt.ToString(DateStringAttribute.DateFormatString2));
CreateMap<DateTime, string>().ConvertUsing(dt => dt.ToString(DateStringAttribute.DateFormatString3));

当我只能指定字符串和日期时间时,如何获得使用的正确格式(双向)?我可以以某种方式访问​​属性名称,以便选择适当的转换格式吗?

标签: automapper

解决方案


我不知道这是否是最好的方法,但这似乎有效。

CreateMap<Destination, Source>()
.ForMember(dest => dest.Value1, opt => opt.MapFrom(src =>src.Value1.HasValue?src.Value1.Value.ToString(DateStringAttribute.DateFormat1):""))
.ForMember(dest => dest.Value2, opt => opt.MapFrom(src =>src.Value2.HasValue?src.Value2.Value.ToString(DateStringAttribute.DateFormat2):""))
.ForMember(dest => dest.Value3, opt => opt.MapFrom(src =>src.Value3.HasValue?src.Value3.Value.ToString(DateStringAttribute.DateFormat3):""))
.ReverseMap();

推荐阅读