我需要将一个对象映射到另一个对象,其中源和目标类型在形状和成员名称上有很大差异。以下是映射示例:
var source = new Source();
var dest = new Destination
{
PropertyA = new SomeTypeA
{
PropertyB = new SomeTypeB
{
DestinationProperty = source.SourceProperty
}
}
};
在此示例中,SomeTypeA在Source类型中没有任何对应的类型,SomeTypeB只有一个属性在Source中具有相应的属性,即SourceProperty。因此,源和目标对象存在很多差异。
我的问题是:是否有像AutoMapper这样的地图工具适合这里的映射,或者手动映射更合适?
答案 0 :(得分:2)
Automapper是一种基于传统的映射。因此,必须手动调整超出惯例的所有内容。如果映射的大部分内容都包含在约定中,那么某些特殊设置没有任何问题:
Mapper.CreateMap<Source, Destination>()
.AfterMap((s, d) => d.PropertyA.PropertyB.DestinationProperty = s.SourceProperty);
当然,如果您不需要以这种方式为目标类型中的每个属性进行映射,这是有道理的。在这种情况下,自定义映射可能不如使用任何映射工具那么邪恶。
答案 1 :(得分:1)
您可以手动为每个属性使用AutoMapper和设置映射。但这可能很笨拙,如果您的对象非常复杂,则不理想。所以这取决于。 : - )
另一种方法可能是使用您要转换的类型的扩展方法手动执行此操作:
public static Destination ToDestination(this Source source) {
// convert here
}