AutoMapper 条件映射
AutoMapper 允许您向属性添加条件,只有当满足这些条件时,该属性才会被映射。
这可以用于如下场景:我们试图将整数映射到无符号整数中。
class Foo {
public int baz;
}
class Bar {
public uint baz;
}
在以下映射中,baz
属性仅当源对象中的值大于或等于 0 时才会被映射。
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<Foo,Bar>()
.ForMember(dest => dest.baz, opt => opt.Condition(src => (src.baz >= 0)));
});
如果您有一个解析器,请参考 此处 以获取具体示例。
前置条件
类似地,还有一个 PreCondition
方法。不同之处在于它在映射过程中更早运行,在源值被解析(考虑 MapFrom
)之前。因此,首先调用前置条件,然后我们决定映射的来源(解析),接着调用条件,最后分配目标值。
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<Foo,Bar>()
.ForMember(dest => dest.baz, opt => {
opt.PreCondition(src => (src.baz >= 0));
opt.MapFrom(src => {
// 可通过前置条件避免的昂贵解析过程
});
});
});
您可以 自行查看 这些步骤。
具体示例请参见 此处 。