有一个问题描述了我想要获取的内容,该问题链接如下:question,但是他们在使用内联映射。
源类型/目标类型
public class SrcInner
{
public int A {get;set;} // imagine here 100500 properties
}
public class SrcOuter
{
public int B {get;set;}
public SrcInner C {get;set}
}
public class Dest
{
public int A {get;set;} // so here imagine 100500 same properties, as in SrcInner
public int B {get;set;}
}
映射配置
public static void AddMapper(this IServiceCollection services)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SrcInner, Dest>();
cfg.CreateMap<SrcOuter, Dest>();
});
var mapper = config.CreateMapper();
services.AddSingleton(mapper);
}
期望的行为
映射后A和B属性都被填充。
实际的行为
映射后只有B属性被填充。
重现步骤
public class Foo
{
IMapper Mapper{get;set;}
public Foo(IMapper mapper) // comes through dependency injection
{
Mapper = mapper;
}
public Bar()
{
var test = new SrcOuter()
{
B = 10;
C = new SrcInner()
{
A = 10;
}
}
var testDest = new Dest();
mapper.Map(test, Dest);
}
}
有没有一种适当的方式来设置配置,以便这样的映射可以工作?
更新
是否有一种将Dest映射到SrcOuter并填充SrcInner的方法?
.ReverseMap()
应该会给你那个。 - Jonas HøghCreateMap<Dest, SrcOuter>.ForMember(srcOuter => srcOuter.C, member => member.MapFrom(dest => dest))
。 - KainWhite