2010-06-07 89 views
5

我有一个源对象,它看起来像这样:Automapper:映射枚举到其[说明]属性

private class SourceObject { 
    public Enum1 EnumProp1 { get; set; } 
    public Enum2 EnumProp2 { get; set; } 
} 

的枚举装饰与自定义[Description]属性,它提供了一个字符串表示,并且我有一个扩展方法.GetDescription()返回它。如何使用该扩展映射这些枚举属性?

我试图映射到这样一个对象:

private class DestinationObject { 
    public string Enum1Description { get; set; } 
    public string Enum2Description { get; set; } 
} 

我想自定义格式是我最好的选择,但我无法弄清楚如何添加格式化指定字段来同时映射。

回答

7

阿格,白痴时刻。没有意识到我可以像这样结合ForMember()和AddFormatter():

Mapper.CreateMap<SourceObject, DestinationObject>() 
    .ForMember(x => x.Enum1Desc, opt => opt.MapFrom(x => x.EnumProp1)) 
    .ForMember(x => x.Enum1Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>()) 
    .ForMember(x => x.Enum2Desc, opt => opt.MapFrom(x => x.EnumProp2)) 
    .ForMember(x => x.Enum2Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>()); 

问题解决了。

+1

除非您需要映射两者,否则我还建议只保留相同的名称,然后添加格式化程序。这种方式的配置较少。 – 2010-06-08 12:22:24

+0

这通常是我采取的方法,除非我有其他很好的理由。这是我进行的一些测试后发现的,并且希望确保至少可以解决硬性问题。谢谢! – 2010-06-08 13:23:14

+0

谢谢!有同样的问题,帮助。 – Darius 2013-05-24 12:57:59