2011-12-06 30 views
20

estoy usando AutoMapper para copiar los valores de una instancia a otra, y estoy encontrando que si la clase tiene una propiedad de matriz, y la instancia de origen tiene la propiedad establecida en null, AutoMapper establece la propiedad de destino a una matriz de longitud cero en lugar de null como lo esperaba.AutoMapper establece una propiedad de matriz a una matriz de longitud cero en lugar de nulo

¿Hay alguna manera de configurar Automapper para establecer el destino en null cuando la fuente es null?

En caso de que mi explicación no es clara, el siguiente código ilustra lo que estoy tratando de describir:

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

Respuesta

35

Encontré que esto ya se informó como issue, y se agregó una nueva opción de configuración (vea este commit). En este momento, la opción no está en la liberación disponible a través de NuGet, pero yo era capaz de encontrar una manera de manejar esto hasta la próxima versión se libera:

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

Actualización:

Desde la versión 2.1.265.0, se puede utilizar la propiedad AllowNullCollections:

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

¡Gracias por la actualización! – hB0

+0

Parece que no funciona a nivel mundial. – DonO

0

Creo que esto es sólo una peculiaridad de utilizar el mismo tipo exacto del origen y del destino. Si realmente los haces diferentes tipos, la matriz de bytes aparece como nula.

+0

yo pensaba lo mismo, y ha creado una clase 'Target', mismas propiedades que' test', asignada '' test' a Target' y la propiedad de matriz todavía estaba siendo g establecido en una matriz de longitud cero. –

+0

¿Qué versión de Automapper - 1.xo 2.x? Creo que probé en 2.x y mi clase de destino obtuvo un valor nulo para el byte []. – PatrickSteele

+0

2.0 - la versión descargada de NuGet –

Cuestiones relacionadas