AutoMapper定义映射级别

public class Foo { public string Baz { get; set; } public List Bars { get; set; } } 

当我映射上面的类时,有没有什么方法可以定义我想让automapper映射对象有多深? 我所追求的一些伪代码:

 var mapped = Mapper.Map(foo, opt => { levels: 0 }); // result = { Baz: "" } var mapped = Mapper.Map(foo, opt => { levels: 1 }); // result = { Baz: "", Bars: [{ Blah: "" }] } var mapped = Mapper.Map(foo, opt => { levels: 2 }); // result = { Baz: "", Bars: [{ Blah: "", Buzz: [{ Baz: "" }] }] } // etc... 

由于nuget依赖性,我目前正在使用automapper 3.3。

您可以通过在运行时提供一个值来解决问题: 如何根据运行时条件忽略属性? 。

组态:

 Mapper.CreateMap().ForMember(e => e.Bars, o => o.Condition(c => !c.Options.Items.ContainsKey("IgnoreBars"))); 

用法:

 Mapper.Map(foo, opts => { opts.Items["IgnoreBars"] = true; }); 

相同的配置方法可以应用于您调用级别的所有嵌套对象。

如果要为数据库实体实现相同的行为,可以使用本答案中描述的ExplicitExpansion方法: 是否可以告诉automapper在运行时忽略映射? 。

组态:

 Mapper.CreateMap() .ForMember(e => e.Bars, o => o.ExplicitExpansion()); 

用法:

 dbContext.Foos.Project().To(membersToExpand: d => d.Bars); 

您可以定义特定MaxDepth地图的MaxDepth如:

 Mapper.CreateMap().MaxDepth(1); 

更多信息: https : //github.com/AutoMapper/AutoMapper/wiki