2009-10-27 6 views
1

Я пытаюсь сопоставить объект с именами свойств, как так:Automapper Mapping

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

Есть ли лучший способ сделать это, чем карта в отдельности каждое свойство к другому? Единственное отличие - подчеркивание.

+0

вы можете сделать это легко с помощью ValueInjecter http://valueinjecter.codeplex.com/documentation, это будет измененный SameNameType ValueInjection, вам просто нужно заменить «_» на string.empty при поиске целевого свойства – Omu

ответ

0
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 выполнит это. –

5

Вам нужно указать подчеркивание именования на стороне источника:

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

Вы можете сделать это на глобальном уровне (как показано выше) или в профиль, если только некоторые из ваших типов источников следуйте этому соглашению об именах.

Смежные вопросы