2010-06-07 2 views
5

У меня есть исходный объект, который выглядит следующим образом:Automapper: Карта в Enum его [Описание] атрибут

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

перечисления украшены с пользовательским [Description] атрибутом, который обеспечивает строковое представление, и у меня есть способ расширения .GetDescription() это возврат. Как сопоставить эти свойства enum с помощью этого расширения?

Я пытаюсь сопоставить объект, как это:

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

Я думаю, что обычай форматировщик мой лучший вариант, но я не могу понять, как добавить форматировщик и указать, какие поле для отображения одновременно.

ответ

7

Argh, идиот момент. Не понял, что я мог бы комбинировать 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

Если вам не нужна карта, я бы также предложил просто оставить имена одинаковыми и просто добавить форматирование. Это меньше. –

+0

Это вообще подход, который я принимаю, если у меня нет по-настоящему веской причины. Это было результатом некоторых тестов, которые я делал, и хотел убедиться, что жесткий случай был, по крайней мере, невозможным. Благодаря! –

+0

Спасибо! С той же проблемой помог. – Darius

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