Member 13466003 Ответов: 2

Отображение между исходным и целевым объектом, который имеет общее свойство как перечисление с различными значениями.


У меня есть исходный объект и целевой объект со свойством enum. Один из членов этого свойства перечисления отличается для каждого объекта. Но мне нужно сопоставить его с помощью Automapper. Как я могу этого достичь?.
пример фрагмента кода:
Исходный Класс:
открытый класс SourceClass
{
public SourceClassification Sourccelevel
{
получить;
набор;
}
}

Класса :
публичный класс DestinationClass
{
ввод публичных DestinationClassification
{
получить;
набор;
}
}

Собственность перечисление исходных классов:
публичная классификация источников перечисления
{
Требуется = 1,
Необязательно = 2,
Селективный = 3
}

Перечисление свойства класса назначения:
DestinationClassification публичных перечисление
{
Мандат= 1,
Необязательно = 2,
Селективный = 3
}

Что я уже пробовал:

cfg.CreateMap<SourceClass,DestinationClass>()
.ForMember(s=>s.Вход, d=>d.Ввод);

2 Ответов

Рейтинг:
0

Nathan Minier

Просто настройте карту для перечислений:

Mapper.CreateMap<SourceClassification,DestinationClassification>().ConvertUsing(val =>
{
   switch(val)
   {
      case SourceClassification.Required:
         return DestinationClassification.Mandate;
      case SourceClassification.Optional:
         return DestinationClassification.Optional;
      case SourceClassification.Selective:
         return DestinationClassification.Selective;
      default:
         return <whatever the default should be>;
   }
});


Это имеет то преимущество, что является гибким решением, поэтому, если какое-либо перечисление будет рефакторизовано, вам нужно будет обязательно обратиться к изменению функции преобразования.


Рейтинг:
0

George Swan

Тебе просто нужно сказать AutoMapper сопоставлять SourceClass.SourceLevel к DestinationClass.Input. Он будет отображаться на значение члена перечисления так Mandate будет карта к Required.


var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<SourceClass, DestinationClass>().ForMember(dest => dest.Input, opts =>
      opts.MapFrom(src => src.SourceLevel));
});

IMapper mapper = config.CreateMapper();
var source = new SourceClass
{
    SourceLevel = SourceClassification.Required,
};
var destination = mapper.Map<SourceClass, DestinationClass>(source);