Automapper映射

问题描述:

我试图与映射属性名称的对象,像这样:Automapper映射

Property_One -> PropertyOne ... etc 
Sample_Property -> SampleProperty 

是否有更好的方法来做到这一点,而不是每个单独的属性映射到另一个?唯一的区别是下划线。

+0

您可以使用ValueInjecter http://valueinjecter.codeplex.com/documentation轻松实现,它将是一个修改过的SameNameType ValueInjection,您只需在查找目标属性时用string.empty替换“_” – Omu 2010-05-05 18:44:11

public class Source 
{ 
    public string Property_One { get; set; } 
} 

public class Dest 
{ 
    public string PropertyOne { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Mapper.CreateMap<Source, Dest>() 
      .ForMember(dest => dest.PropertyOne, 
         opt => opt.MapFrom(src => src.Property_One)); 

     var source = new Source 
     { 
      Property_One = "property1" 
     }; 

     var destination = Mapper.Map<Source, Dest>(source); 
     Console.WriteLine(destination.PropertyOne); 
    } 
} 
+0

这就是我现在正在做的事情,我需要一种映射它的通用方法。看起来,INamingConvention界面将实现这一点。 – 2009-10-27 12:34:13

你需要指定下划线源侧命名约定:

Mapper.Initialize(i => 
{ 
    i.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention(); 
    i.CreateMap<Source, Dest>(); 
}); 

你可以做,在全球范围(如上图所示)或每个配置文件,如果只有部分源类型遵循这个命名约定。