0

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

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

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

我的问题是:是否有像 AutoMapper 这样的映射工具非常适合在这里进行映射,或者手动映射更合适?

4

2 回答 2

2

Automapper 是一个基于常规的映射。因此,超出约定的所有内容都必须手动调整。如果映射的大部分内容都被约定覆盖,那么一些特殊设置就没有错:

        Mapper.CreateMap<Source, Destination>()
            .AfterMap((s, d) => d.PropertyA.PropertyB.DestinationProperty = s.SourceProperty);

当然,这是有道理的,如果您不需要为目标类型中的每个属性以这种方式进行映射。在这种情况下,与使用任何映射工具相比,自定义映射可能不会那么邪恶。

于 2013-06-05T10:21:39.303 回答
1

您可以使用 AutoMapper 并手动为每个属性设置映射。但是,如果您的对象非常复杂,这可能会很笨拙并且不理想。所以这取决于。:-)

另一种方法是手动使用您想要转换的类型的扩展方法来完成它:

public static Destination ToDestination(this Source source) {
 // convert here
}
于 2013-06-05T10:19:47.070 回答