繁体   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