c# Строка сопоставления Automapper с 1-м элементом массива во вложенном объекте - PullRequest
0 голосов
/ 08 мая 2020

Мой репозиторий возвращает объект пользователя, который имеет это определение, где у пользователя всегда будет только 1 адрес электронной почты.

Пользователь

    public class User
{
    [Key]
    public string UserName { get; set; }

    [Required]
    [MaxLength(50)]
    public string DisplayName { get; set; }

    [Required]
    [MaxLength(50)]
    public string  Email { get; set; }

}

Затем я сопоставляю это с UserDTO объект для передачи в среду, где они ожидают, что поле электронной почты будет массивом объектов электронной почты. Итак, я создал этот объект электронной почты в соответствии с потребностями принимающей системы, и он выглядит так, как показано ниже. Мы могли бы установить Type в строку со значением «работа», а Primary в логическое значение true;

    public class Email
{
    public string Value { get; set; }

    public string Type { get; set; }

    public bool Primary { get; set; }
}

И затем у меня есть мой UserDTO, который выглядит так:

    public class UserReadDto
{

    public string schemas { get; set; } 

    public string UserName { get; set; }

    public string externalId { get; set; }

    // this should be an array of names, this is a name object. 
    public Name name { get; set; }

    public string DisplayName { get; set; }

    public Email[] Emails { get; set; }
}

Is Возможно ли, чтобы Automapper сопоставлял строку электронной почты, например test@test.com, с массивом объектов электронной почты, в котором есть только один объект электронной почты для назначения?

1 Ответ

1 голос
/ 08 мая 2020

Вы можете создать функцию, которая возвращает вам список, примерно так:

public static Email[] GetList(User x)
{
    return new List<Email>
    {
        new Email()
        {
            Value = x.Address
        }
    }.ToArray()
}

И затем вы можете поместить это в свою конфигурацию сопоставления:

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserReadDto>()
       .ForMember(d => d.Emails, src =>
       {
           src.MapFrom(x => GetList(x));
       });
});

Вы можете поместите метод GetList() в свою модель User или где-нибудь еще, если вы можете получить к нему доступ в конфигурации сопоставления.

Дополнительная информация на странице документации автомата здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...