使用AutoMapper跨类的所有属性的条件项目

时间:2011-06-30 14:27:04

标签: automapper

我希望能够从2个子类中的任何一个中投影/映射属性。 想象一下父类有2个子类,其中1个子类指向子类。每个子类必须映射到模型类的属性。

但是,如果子类1为null,则它不应映射到模型,而应映射到类2属性。

这就像我想要做的一样,除了在整个属性类别而不是1个属性中执行:

Conditonal projection

我希望我不必为每个类属性创建一个CustomResolver,以及是否有更好的方法来实现这一点。想象一下,子类每个都有10个相同的属性,我想要做的就是根据填充的子类来切换映射。

public class Message
{
     public string Comment { get; set; }
     public Inbound? InboundMessage { get; set; }
     public Outbound? OutboundMessage { get; set; }
}

public class Inbound
{
     public string Body { get; set; }
    // 10 properties...
}

public class Outbound
{
     public string Body { get; set; }
    // 10 properties...
}


public class MessageModel
{
     public string Comment { get; set; }
     public string Body { get; set; }
    // 10 properties....
}

1 个答案:

答案 0 :(得分:0)

惊讶没有人对此有一个答案,所以在我做出决定的时候回答了自己。

如果您需要有条件地映射属性,具体取决于是否填充了子类,或者整个类的任何其他逻辑,那么您可以使用TypeConverter。

在TypeConverter中,您在ConvertCore函数中测试source参数,然后在正确的源上调用Mapper.Map以将子类属性传递给模型。

然后可以返回mapper的返回,这将是目标。 我从未意识到你甚至可以在TypeConverter中调用Mapper.Map()。