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吗?