Automapper устанавливает свойство массива для массива нулевой длины, а не ноль - PullRequest
23 голосов
/ 07 декабря 2011

Я использую 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
    }
}

Ответы [ 2 ]

39 голосов
/ 07 декабря 2011

Я обнаружил, что об этом уже сообщали как о проблеме , и был добавлен новый параметр конфигурации (см. commit ).В настоящее время опция недоступна в выпуске, доступном через NuGet, но я смог найти способ справиться с этим до выпуска следующей версии:

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

Обновление:

Начиная с версии 2.1.265.0, вы можете использовать свойство AllowNullCollections:

Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();
0 голосов
/ 07 декабря 2011

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

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