将自动映射器配置为在类型是内部属性而不是内部属性时忽略类型

本文关键字:内部 属性 类型 配置 映射 | 更新日期: 2023-09-27 18:32:04

这个需要一点解释。我有一组这样的类型;

public class Child
{
    public int ID { get; set;}
}
public class MayHaveChild
{
    public Child Value { get; set; }
    public int MayID { get; set; }
}
public class MustNotHaveChild { get; set; }
{
    public List<MayHaveChild> MayValues { get; set; }
}

在上述情况下,我希望MayHaveChild的任何映射都具有Child对象的值,除非我映射了MustNotHaveChild。 例如;

当我有

//...some code
MayHave obj = Mapper.Map<MayHaveChild>(childObj);
// I want to be able to access obj.Child.ID

但是当我有

//...some code
MustNotHave obj = Mapper.Map<MustNotHaveChild>(notHaveObj);
// I want to be able to access obj.MayValues[0].MayID but 
// *not* obj.MayValues[0].Value

我已经浏览了有关嵌套、多态性、列表等的自动映射器文档,但我找不到任何与我想要的东西完全匹配的内容。

我可以通过将 MayHave 类继承到 MustNotHave 变体来解决这个问题,但这将涉及更改相当多的现有代码。有没有办法以我需要的方式配置自动映射器?

将自动映射器配置为在类型是内部属性而不是内部属性时忽略类型

我找不到一种方法来按照我想要的方式配置 AutoMapper,而无需沿着继承路线进行 - 尽管事实证明这比我想象的要少。我做了如下的事情;

public class NoChild : MayHaveChild
{
}
public class MustNotHaveChild { get; set; }
{
         //       '/--datatype change here
    public List<NoChild> MayValues { get; set; }
}

然后,稍后在自动映射器配置中;

Mapper.CreateMap<MayHave, NoChild>()
      .ForMember(c => c.Child, opt => opt.Ignore());