[英]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.