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



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

然而,如果子类1为null,那么它不应该映射到模型,而是应该映射类2的属性。

这就像我想在这里做的一样,除了在一整类属性而不是一个属性上做:

条件投影

我希望我不必为每个类属性创建一个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....
}

令人惊讶的是,没有人对此有答案,所以当我想好该做什么时,我自己也回答了。

如果您需要根据是否填充子类或整个类的任何其他逻辑来有条件地映射属性,那么您可以使用TypeConverter。

在TypeConverter中,测试ConvertCore函数中的源参数,然后调用Mapper。映射到正确的源以将子类属性传递给模型。

然后可以将映射器返回的结果返回到目的地。我从来没有意识到你仍然可以调用Mapper。Map((,甚至在TypeConverter中也是如此。

最新更新