Automapper将数组属性设置为零长度数组而不是null

Jef*_*ata 26 automapper

我正在使用Automapper将值从一个实例复制到另一个实例,我发现如果该类具有数组属性,并且源实例的属性设置为null,则Automapper将目标属性设置为零长度数组的null如我所料.

有没有办法配置Automapper将目标设置null为源何时null

如果我的解释不清楚,以下代码说明了我想要描述的内容:

public class Test
{
    public byte[] ByteArray { get; set; }
    public int? NullableInt { get; set; }
    public int Int { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Mapper.CreateMap<Test, Test>();

        var test1 = new Test { Int = 123, NullableInt = null, ByteArray = null };
        var test2 = Mapper.Map<Test>(test1);

        // test1:  Int == 123, NullableInt == null, ByteArray == null
        // test2:  Int == 123, NullableInt == null, ByteArray == byte[0]  <-- expect this to be null
    }
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ata 43

我发现这已经报告为一个问题,并添加了一个新的配置选项(请参阅此提交).此时,该选项不在NuGet提供的版本中,但我能够找到一种方法来处理这个问题,直到下一个版本发布:

Mapper.CreateMap<Test, Test>()
    .ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray));
Run Code Online (Sandbox Code Playgroud)

更新:

从版本2.1.265.0开始,您可以使用以下AllowNullCollections属性:

Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();
Run Code Online (Sandbox Code Playgroud)