问题描述
我有3类:A,B和C,其中A和B都应转换为C,而A是B的包装:
public class C
{
public int Id { get; set; }
public string Title { get; set; }
// other properties ...
}
public class B
{
public int Id { get; set; }
public string Title { get; set; }
// other properties ...
}
public class A
{
public int IdA { get; set; }
public B Data { get; set; }
}
public class MapperProfile: Profile
{
public MapperProfile()
{
CreateMap<B,C>();
CreateMap<A,C>();
}
}
从A映射到C时,我想用A的Id
覆盖C的IdA
,而Data
中的其他所有内容都填充到C中的其他属性,这实际上是定义的映射与CreateMap<B,C>()
。
对stackoverflow的搜索建议使用ConvertUsing
,但这需要一个映射器实例,而我在Profile
类中没有实例。有什么想法吗?
解决方法
您可以使用ConverUsing
重载来实现此目的。您的映射配置文件如下所示:
CreateMap<B,C>();
CreateMap<A,C>()
.ConvertUsing((src,dst,ctx) =>
{
var c = ctx.Mapper.Map<C>(src.Data);
c.Id = src.IdA;
return c;
});