当源和目标在形状和名称上不同时使用映射工具

时间:2013-06-05 09:48:30

标签: c# .net automapper

我需要将一个对象映射到另一个对象,其中源和目标类型在形状和成员名称上有很大差异。以下是映射示例:

var source = new Source();
var dest = new Destination
{
    PropertyA = new SomeTypeA
        {
            PropertyB = new SomeTypeB
                {
                    DestinationProperty = source.SourceProperty
                }
        }
};

在此示例中,SomeTypeA在Source类型中没有任何对应的类型,SomeTypeB只有一个属性在Source中具有相应的属性,即SourceProperty。因此,源和目标对象存在很多差异。

我的问题是:是否有像AutoMapper这样的地图工具适合这里的映射,或者手动映射更合适?

2 个答案:

答案 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
}