Может ли AutoMapper сопоставлять тип значения (Enum) и ссылочный тип?(Строка) - PullRequest
32 голосов
/ 12 апреля 2011

Странная проблема - я пытаюсь отобразить между enum и string , используя AutoMapper:

Mapper.CreateMap<MyEnum, string>()
   .ForMember(dest => dest, opt => opt.MapFrom(src => src.ToString()));

Не беспокойтесь, что я использую.ToString(), на самом деле я использую метод расширения для самого перечисления (.ToDescription()), но я сохранил его простым ради вопроса.

Выше приведено ссылка на объект ошибка, когда я делаю простую настройку отображения.

Учитывая это работает:

string enumString = MyEnum.MyEnumType.ToString();

Я не могу понять, почему моя конфигурация AutoMapper не работает.

Может ли AutoMapper справиться с этим, я что-то не так делаю, или это ошибка с AutoMapper?

Есть идеи?

РЕДАКТИРОВАТЬ

Я также пытался использовать пользовательский распознаватель :

Mapper.CreateMap<MyEnum, string>()
                .ForMember(dest => dest, opt => opt.ResolveUsing<MyEnumResolver>());

public class MyEnumResolver: ValueResolver<MyEnum,string>
{
   protected override string ResolveCore(MyEnum source)
   {
      return source.ToString();
   }
}

Та же ошибка в той же строке.(

1 Ответ

59 голосов
/ 12 апреля 2011

Для отображения между двумя типами, когда вы получаете контроль над всем отображением, используйте ConvertUsing:

Mapper.CreateMap<MyEnum, string>().ConvertUsing(src => src.ToString());

Все остальные методы предполагают, что вы сопоставляете отдельные элементы типа назначения.

...