.net 使用AutoMapper基于鉴别器值的不同属性映射

.net 使用AutoMapper基于鉴别器值的不同属性映射,.net,automapper,.net,Automapper,我有一个非常通用的对象,我想使用AutomMapper将其映射到目标类型,但我想根据源类型中属性的值将其映射到不同的类型。例如,假设我有: public class Source { public string Discriminator { get; } public string ValueA { get; } public string ValueB { get; } } public class Target { public string Value

我有一个非常通用的对象,我想使用AutomMapper将其映射到目标类型,但我想根据源类型中属性的值将其映射到不同的类型。例如,假设我有:

public class Source
{
    public string Discriminator { get; }
    public string ValueA { get; }
    public string ValueB { get; }
}

public class Target
{
    public string Value { get; set; }
}
我想将Source.ValueA映射到Target.Value,如果Source.Discriminator==“A”,则映射到Source.ValueB,如果Source.Discriminator==“B”,则映射到Target.Value


使用AutoMapper可以这样做吗?

您可以这样做:

Mapper.Map<Spurce, Target>().ForMember(x => x.Value, x => x.MapFrom(y => {
    if(y.Discriminator == "A")
        return y.ValueA;
    return y.ValueB;
    });
Mapper.Map().ForMember(x=>x.Value,x=>x.MapFrom(y=>{
如果(y.鉴别器==“A”)
返回y.ValueA;
返回y.ValueB;
});

我可以,但如果可能的话,我想使用Automapper的功能。我有几个源字段和几个目标字段。如果我使用您建议的方法,我将不得不为每个目标成员添加几个if/else语句,这是我想要避免的。@Karl,您不需要像我在这里那样硬编码。您可以像我们一样我将根据您的约定使用反射。