automapper - 在 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));
当我只能指定字符串和日期时间时,如何获得使用的正确格式(双向)?我可以以某种方式访问属性名称,以便选择适当的转换格式吗?
解决方案
我不知道这是否是最好的方法,但这似乎有效。
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();
推荐阅读
- c# - 如何正确取消 Task.Run 内部有死锁
- c# - 如何在 C# 中设置 Azure 信息保护属性
- java - 有向图中的电路数
- mobile - 我可以使用除 MyApp 类之外的类来启动我的应用程序吗?
- linux - 如何获取shell命令的位置参数
- sql-server - 安装 SQL Server 2017 Developer Edition:如何修复 Visual Studio 运行时(库)“Microsoft Visual C++ 2019 X64 最低运行时”?
- blazor - 使用 jquery 的 Blazor 屏蔽输入不起作用
- java - 如何从 Java 创建 Kotlin 列表?
- pandas - 为什么运行 pandas_udf 时 Pyspark 失败?
- javascript - 角度搜索栏 this.items.filter 不是函数