项目
版本

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 => {
            // 可通过前置条件避免的昂贵解析过程
        });
    });
});

您可以 自行查看 这些步骤。

具体示例请参见 此处

在本文档中