簡體   English   中英

AutoMapper - Map 子屬性隱藏庫 class 屬性

[英]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類型
  • 隱藏的BaseChildnull

您可以在以下內容中看到(請參閱 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM