将自动映射器配置为在类型是内部属性而不是内部属性时忽略类型
本文关键字:内部 属性 类型 配置 映射 | 更新日期: 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());