Automapper sets an array property to a zero-length array rather than null

主宰稳场 提交于 2019-12-23 06:47:05

问题


I'm using Automapper to copy values from one instance to another, and I'm finding that if the class has an array property, and the source instance has the property set to null, Automapper sets the destination property to a zero-length array instead of null as I expected.

Is there a way to configure Automapper to set the destination to null when the source is null?

In case my explanation is unclear, the following code illustrates what I'm trying to describe:

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
    }
}

回答1:


I found that this was already reported as an issue, and a new configuration option was added (see this commit). At this time, the option is not in the release available via NuGet, but I was able to figure out a way to handle this until the next version is released:

Mapper.CreateMap<Test, Test>()
    .ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray));

Update:

As of version 2.1.265.0, you can using the AllowNullCollections property:

Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();



回答2:


I think this is just a quirk from using the exact same type for both source and destination. If you actually make them different types, the byte array comes through as null.



来源:https://stackoverflow.com/questions/8408612/automapper-sets-an-array-property-to-a-zero-length-array-rather-than-null

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!