c# - 如何映射到仅获取目标子对象?
问题描述
我有一个类似于这些的源和目标类型。
public class Source {
public int A { get; set; }
public SourceChild Child { get; } = new SourceChild ();
}
public class SourceChild {
public int B { get; set; }
}
public class Destination {
public int A { get; set; }
public DestinationChild Child { get; } = new DestinationChild();
}
public class DestinationChild {
public int B { get; set; }
}
我正在以一种简单的方式在配置文件中创建我的映射,而无需任何额外的配置。
...
this.CreateMap<Source, Destination>();
this.CreateMap<SourceChild, DestinationChild>();
...
当我尝试映射时,我发现在结果Destination
对象中,该Child
属性是一个等于零的空实例。DestinationChild
B
var source = new Source() {
A = 1,
Child = {
B = 2
}
};
var destination = mapper.Map<Source, Destination>(source);
我希望这destination.Child.B
等于2
。
我尝试UseDestinationValue
为目标成员添加配置Child
,但没有更改任何内容。
任何想法将不胜感激。
更新
MapFrom
我没想到会这样,但似乎在像这样的映射配置中有明确的情况下它会起作用。
...
this.CreateMap<Source, Destination>()
.ForMember(e => e.Child, o => o.MapFrom(e => e.Child));
this.CreateMap<SourceChild, DestinationChild>();
...
所以我的下一个问题是为什么需要这个?按照惯例,它不会被认为是默认行为吗?
更新 2
只是为了进一步挖掘,如果我List<T>
在根对象中有一个 get-only 子属性,它也不会映射,除非我添加显式MapFrom
. 但是,如果我在 get-only 中有一个 get-only 子List<T>
属性DestinationChild
,那么它将很好地从 soruce 填充。我觉得这里有一些不一致的行为。
解决方案
推荐阅读
- c++ - 使用类方法时的空输出
- robotframework - Python 3.X 机器人框架:用于将 SOAP 请求推送到服务/侦听器的库
- hyperledger-fabric - 如何在 Hyperledger Fabric 的事务 2 中调用的事务 1 中触发事件?
- autodesk-forge - 使用 Forge Webhooks 时在哪里处理回调:服务器端还是客户端?
- java - 如何计算每个科目的平均值
- algorithm - 将对象均匀地包装在列中
- css - 浏览器如何使用“sizes”和“srcset”属性选择正确的图像?
- spring - dockerized postgres 和 dockerized Spring boot app
- typescript - 在编写从 typescript 到 dart 的转换器时,人们面临哪些技术障碍?
- css - woocommerce 减少图像和细节之间的空间