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
更多信息: https : //github.com/AutoMapper/AutoMapper/wiki