我正在将AutoMapper
从版本3
升级到8
,并且在null
转换行为已更改的情况下,我进行了一些坏的测试。我仍在使用静态API。以前,当我有一个对象要使用int[]
的{{1}}属性进行映射而未指定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>()
映射来实现此目的,但是根据此行为,我们可能隐含数百种类型,因此我希望能够对其进行全局配置/使其保持原状。
有什么想法吗?