Automapper отображает строку в список <string> - PullRequest
0 голосов
/ 06 марта 2020

У меня есть два класса

 public class SourceClass
{
    public Guid Id { get; set; }
    public string Provider { get; set; }
}


public class DestinationClass
{
    public Guid Id { get; set; }
    public List<string> Provider { get; set; }
}

Я инициализировал свое отображение, используя следующий код

CreateMap<SourceClass, DestinationClass>();

И затем в моем контроллере у меня есть:

Mapper.Map<List<DestinationClass>>(requests)

где «запросы» - это список объектов SourceClass, передаваемых моему контроллеру.

Мой вопрос заключается в том, как я могу сопоставить провайдера (типа string) в моем SourceClass с провайдером (типа List в моем классе Destination?

Поставщик в исходном классе всегда будет одной строкой, а поставщик в целевом классе всегда будет списком одной строки.

* 1017 Вот что я попробовал в конфигурациях сопоставления:
CreateMap<SourceClass, DestinationClass>().ForMember(destinationMember => destinationMember.Provider,
                memberOptions => memberOptions.MapFrom(src => {
                return string.IsNullOrEmpty(src.Provider) ? [""] : src.Provider.ToList());

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

Прежде всего, я бы рекомендовал переименовать ваше свойство назначения в Providers, чтобы избежать путаницы / показать, что это коллекция. Тогда вы могли бы попробовать это

CreateMap<SourceClass, DestinationClass>()
  .ForMember(destinationMember => destinationMember.Providers,
  memberOptions => memberOptions.MapFrom(src => new List<string> {src.Provider ?? ""}));

В частности, этот бит

src => new List<string> {src.Provider ?? ""}

Создает новый список строк типа с одним значением, либо src.Provider, либо, если это ноль, пустая строка.

0 голосов
/ 06 марта 2020

Если вы приведете свойство Provider вашего исходного члена к списку, вы получите список типа char. Этот код должен отражать то, что вам нужно.

CreateMap<SourceClass, DestinationClass>()
.ForMember(
    destinationMember => destinationMember.Provider,
    memberOptions => memberOptions.MapFrom(
        src => string.IsNullOrEmpty(src.Provider) ? new List<string>() { "" } : new List<string> { src.Provider }
    )
);
0 голосов
/ 06 марта 2020

Замените свою конфигурацию сопоставления на эту:

CreateMap<SourceClass, DestinationClass>()
  .ForMember(destinationMember => destinationMember.Provider,
  memberOptions => memberOptions
    .MapFrom(src => 
    { 
      return new List<string>{ string.IsNullOrEmpty(src.Provider) ? "" : src.Provider)
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...