【发布时间】:2018-01-25 19:22:41
【问题描述】:
你能帮帮我吗?我有一个对象
class Source{
public string A {get;set;}
public string B {get;set;}
public string C {get;set;}
public string D {get;set;}
}
和目标对象
class Dest{
public string A1 {get;set;}
public string B1 {get;set;}
}
是否可以使用 Automapper 从源对象创建 Dest 对象,但 Dest 的第一个实例映射 A 到 A1 和 B 到 B1,在 Dest 的第二个实例映射 C 到 A1 和 D 到 B1?
在梦寐以求的解决方案中获得收藏?
类似:
Mapper.Initialize(cfg =>{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B;))
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D))});
或者:
Mapper.Initialize(cfg =>{
cfg.CreateMap<Source, ICollection<Dest>>()})
[更新]
也许更好的解决方案是使用反射并编写带有属性 [Attribute(MapType, Order, propertyName)] 的自定义映射器。例如
class Source{
[Dest(Dest,1,"A1")]
public string A {get;set;}
[Dest(Dest,1,"B1")]
public string B {get;set;}
[Dest(Dest,2,"A1")]
public string C {get;set;}
[Dest(Dest,2,"B1")]
public string D {get;set;}
}
New 遍历属性并使用属性中的类型创建对象。
【问题讨论】:
-
你可以在你的解析器中设置一个条件(MapFrom 或 ResolveUsing)。
-
但是我该如何使用它呢?我仍然无法获取 Map
>。
标签: automapper