[英]AutoMapper - Map child property hiding base class property
我在尝试使用带有 C# 的AutoMapper将 map a class 派生为 class 时遇到了一个非常愚蠢的问题。
这些是我的课程:
class BaseParent {
public string Name { get; set; }
public BaseChild Child { get; set; }
}
class BaseChild {
public int Age { get; set; }
}
class DerivedParent : BaseParent {
public new DerivedChild Child { get; set; }
}
class DerivedChild : BaseChild { }
特别是,我要实现的是正确设置映射的 class 的所有属性。 问题是映射的 class 的Child
属性未设置并保持为 null 。
这是我正在使用的映射配置:
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<BaseChild, DerivedChild>();
cfg.CreateMap<BaseParent, DerivedParent>()
.ForMember(dest => dest.Child, opt => opt.MapFrom(src => src.Child));
});
任何帮助表示赞赏。
谢谢
编辑
实际上说Child
属性仍然是null是不正确的。 调试代码我可以看到有 2 个子属性具有相同的名称,因为用于隐藏父属性的new
修饰符。
不管怎样,我需要的财产仍然是null 。
你确定你看对了吗?
给定以下配置:
// Arrange
var mapper = new Mapper(new MapperConfiguration(cfg => {
cfg.CreateMap<BaseChild, DerivedChild>();
cfg.CreateMap<BaseParent, DerivedParent>()
.ForMember(dest => dest.Child, opt => opt.MapFrom(src => src.Child));
}));
var baseParent = new BaseParent { Name = "A", Child = new BaseChild { Age = 1 } };
// Act
var derived = mapper.Map<DerivedParent>(baseParent);
我可以向你保证:
derived.Child
肯定not null
DerivedChild
类型BaseChild
是null
您可以在以下内容中看到(请参阅 working Fiddle ):
// Assert
Assert.IsNotNull(derived);
Assert.IsInstanceOf<DerivedParent>(derived);
// The 'new' Child property is not null
Assert.IsNotNull(derived.Child);
Assert.IsInstanceOf<DerivedChild>(derived.Child);
// The hidden property should be null
Assert.IsNull(((BaseParent)derived).Child);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.