Я обновляю 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
для достижения этой цели, но у нас возможно сотни типов неявно в зависимости от этого поведения, поэтому я хочу иметь возможность настроитьэто глобально / это работает как есть.
Есть идеи?