如何使用AutoMapper按类中定义的顺序映射对象?

时间:2016-03-02 13:46:25

标签: c# .net mapping automapper

鉴于这两个对象(我使用非常不同的对象来更好地阐明):

public class Car
{
   public string Brand {get;set;}
   public int Speed {get;set;}
}

public class Apple
{
   public string Variety {get;set;}
   public int Production {get;set;}
}

AutoMapper定义允许使用不同名称映射属性的projection

var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Car, Apple>()
                 .ForMember(dest => dest.Variety, opt => opt.MapFrom( src => src.Brand))
                 .ForMember(dest => dest.Production, opt => opt.MapFrom(src => src.Speed))
        });

这应该可行但是:

有没有办法按照类中定义的顺序直接映射?:

Brand -> Variety
Speed -> Production

我正在使用 AutoMapper 4.2.1

2 个答案:

答案 0 :(得分:4)

  

有没有办法按照类中定义的顺序直接映射属性?   不,但您可以显式设置映射顺序,以便某些成员在其他成员之前映射。这允许您为一个属性提供自定义映射,该属性可能依赖于您需要映射的另一个目标属性。

        CreateMap<SourceType, DestType>()
            .ForMember(
                dst => dst.Property1,
                opt.SetMappingOrder(0))
            .ForMember(
                dst => dst.Property2,
                opts =>
                {
                    opts.SetMappingOrder(20);
                    opts.ResolveUsing<ResolverThatNeedsProperty1ToBeMappedAlready>();
                });

答案 1 :(得分:1)

没有。 &#34;命令&#34;您正在描述的只是它们在您的C#源代码中的表达方式。请记住,.NET编译为中间语言(IL),然后由.NET运行时执行。您无法保证将字段输入C#的顺序与编译成IL时的顺序相同。