自动映射从一个对象到嵌套对象的映射

使用Automapper 2.0映射内部对象的最佳方法是什么?

  1. 使用此问题中的解决方案(Automapper 1.0)

  2. 创建自定义值解析器

  3. public class DTOObject { // MainObject public int Id { get; set; } public string Name { get; set; } // SubObject (TopObject) public string TopText { get; set; } public string TopFont { get; set; } // SubObject (BottomObject) public string BottomText { get; set; } public string BottomFont { get; set; } } public class MainObject { public int Id { get; set; } public string Name { get; set; } public SubObject TopObject { get; set; } public SubObject BottomObject { get; set; } } public class SubObject { public string SubPropText { get; set; } public string SubPropFont { get; set; } } 

自定义值解析器

  public class CustomResolver : ValueResolver { protected override SubObject ResolveCore(DTOObject source) { return Mapper.Map(source); } } 

对我来说,可以只使用MapFrom(没有ResolveUsing,这使你有机会使用这个映射与IQueryable扩展)。 因此,您将在Automapper配置中获得以下内容:

 Mapper.CreateMap() .ForMember(dest => dest.SubPropText, opt => opt.MapFrom(x => x.BottomText)) .ForMember(dest => dest.SubPropFont, opt => opt.MapFrom(x => x.BottomFont)); Mapper.CreateMap() .ForMember(dest => dest.SubPart, opt => opt.MapFrom(x => x)); 

我最终为来自DTOObjectMainObject任何SubObjects创建了自己的值解析器。

 public class PartResolver : ValueResolver { protected override T ResolveCore(DTOObject source) { return Mapper.Map(source); } } 

然后在我的DTOObject配置中,我创建一个从DTOObjectSubObject映射,并使用ValueResolver将该对象映射到MainObject

 Mapper.CreateMap(); Mapper.CreateMap() .ForMember(dest => dest.SubPart, opt => opt.ResolveUsing>());