2009-10-27 7 views
1

J'essaie de mapper un objet avec les noms de propriétés comme ceci:Automapper Mapping

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

est-il une meilleure façon de le faire que de la carte individuellement chaque propriété à un autre? La seule différence est le soulignement.

+0

vous pouvez le faire facilement avec le ValueInjecter http://valueinjecter.codeplex.com/documentation, ce serait une SameInformation ValueInjection modifiée, il vous suffit de remplacer le "_" par string.empty lorsque vous recherchez la propriété target – Omu

Répondre

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

C'est ce que je fais maintenant, j'ai besoin d'une façon générique de le mapper. On dirait que l'interface INamingConvention accomplira cela. –

5

Vous devez spécifier le trait de soulignement convention de nommage du côté source:

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

Vous pouvez le faire dans le monde (comme indiqué ci-dessus) ou par profil, si seulement certains de vos types de sources suivez cette convention de nommage.