automapper - sobre - tutorial de matrices
Automapper establece una propiedad de matriz en una matriz de longitud cero en lugar de nula (2)
Estoy usando Automapper para copiar valores de una instancia a otra, y estoy descubriendo 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 en una matriz de longitud cero En lugar de null
como esperaba.
¿Hay una manera de configurar Automapper para establecer el destino en null
cuando la fuente es null
?
En caso de que mi explicación no esté 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
}
}
Creo que esto es solo una peculiaridad de usar el mismo tipo exacto para el origen y el destino. Si realmente los hace diferentes tipos, la matriz de bytes aparece como nula.
Descubrí que esto ya se había informado como un issue y se agregó una nueva opción de configuración (ver este commit ). En este momento, la opción no está en el lanzamiento disponible a través de NuGet, pero pude encontrar una manera de manejar esto hasta que se lance la próxima versión:
Mapper.CreateMap<Test, Test>()
.ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray));
Actualizar:
A partir de la versión 2.1.265.0, puede usar la propiedad AllowNullCollections
:
Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();