Глобальная конфигурация AutoMapper - по умолчанию конвертировать свойство пустого массива в пустой массив - PullRequest
1 голос
/ 22 мая 2019

Я обновляю AutoMapper с версии 3 до 8, и у меня есть несколько неработающих тестов, в которых изменилось поведение преобразования null.Я все еще использую статический API.Раньше, когда у меня был объект для сопоставления со свойством int[], равным null, без указания преобразования ForMember, он создавал пустой массив.Рассмотрим эти классы:

    public class From
    {
        public int[] Ids { get; set; }
    }

    public class To
    {
        public int[] Ids { get; set; }
    }

Вызов следующего кода приводит к исключению в AutoMapper:

var from = new From
{
    Ids = null
};
var @to = Mapper.Map<From, To>( from ); //KABOOM!!!
Assert.NotNull( @to.Ids );

Исключение: System.ArgumentException : System.Int32[] needs to have a constructor with 0 args or only optional args.

Когда они отображаютсявот так:

Mapper.Initialize(
                config => {
                    config.CreateMap<From, To>();

                    config.AllowNullDestinationValues = false;
                    config.AllowNullCollections = true;

                    config.CreateMissingTypeMaps = true;
                } );

Я попытался добавить явный конвертер для int[], но это не сработало:

config.CreateMap<int[], int[]>().ConvertUsing( x => x ?? new int[ 0 ] );

И я также попытался удалитьстрока CreateMap<From, To>(), и она все еще не работает.

Я знаю, что могу добавить отображение ForMember для достижения этой цели, но у нас возможно сотни типов неявно в зависимости от этого поведения, поэтому я хочу иметь возможность настроитьэто глобально / это работает как есть.

Есть идеи?

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