Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当源和目标的形状和名称不同时使用映射工具_C#_.net_Automapper - Fatal编程技术网

C# 当源和目标的形状和名称不同时使用映射工具

C# 当源和目标的形状和名称不同时使用映射工具,c#,.net,automapper,C#,.net,Automapper,我需要将一个对象映射到另一个对象,其中源类型和目标类型在形状和成员名称上都有很大差异。下面是一个映射示例: var source = new Source(); var dest = new Destination { PropertyA = new SomeTypeA { PropertyB = new SomeTypeB { DestinationProperty = so

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

var source = new Source();
var dest = new Destination
{
    PropertyA = new SomeTypeA
        {
            PropertyB = new SomeTypeB
                {
                    DestinationProperty = source.SourceProperty
                }
        }
};
在本例中,SomeTypeA在源类型中没有任何对应的类型,而SomeTypeB只有一个在源中具有对应属性的属性,即SourceProperty。因此,在源对象和目标对象中有相当大的差异


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

您可以手动为每个属性使用AutoMapper和设置映射。但是,如果对象非常复杂,这可能会很笨拙,也不理想。这要看情况了。:-)

另一种方法是对要转换的类型使用扩展方法手动执行此操作:

public static Destination ToDestination(this Source source) {
 // convert here
}

您可以手动为每个属性使用自动映射和设置映射。但是,如果对象非常复杂,这可能会很笨拙,也不理想。这要看情况了。:-)

另一种方法是对要转换的类型使用扩展方法手动执行此操作:

public static Destination ToDestination(this Source source) {
 // convert here
}

Automapper是一种基于传统的映射。因此,超出约定的所有内容都必须手动调整。如果映射的大部分由约定覆盖,则某些特殊设置没有问题:

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

当然,如果不需要以这种方式为目标类型中的每个属性进行映射,那么这是有意义的。在这种情况下,与使用任何映射工具相比,自定义映射的危害更小。

Automapper是一种基于传统的映射工具。因此,超出约定的所有内容都必须手动调整。如果映射的大部分由约定覆盖,则某些特殊设置没有问题:

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

当然,如果不需要以这种方式为目标类型中的每个属性进行映射,那么这是有意义的。在这种情况下,与使用任何映射工具相比,自定义映射的危害更小。

有什么原因不能只使用automapper吗?有什么原因不能只使用automapper吗?