Automapper définit une propriété array sur un tableau de longueur nulle plutôt que null
J'utilise Automapper pour copier des valeurs d'une instance à une autre, et je constate que si la classe a une propriété array et que l'instance source a la propriété null
, Automapper définit la propriété destination sur un tableau de longueur nulle au lieu de null
comme je m'y attendais.
Est-il un moyen de configurer Automapper pour définir la destination de null
quand la source est null
?
Dans le cas où mon explication n'est pas claire, le code suivant illustre ce que j'essaie de faire décrire:
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 réponses
J'ai trouvé que cela était déjà signalé comme un problème , et une nouvelle option de configuration a été ajoutée (voir ce commit ). En ce moment, l'option n'est pas dans la version disponible via NuGet, mais j'ai pu trouver un moyen de gérer cela jusqu'à ce que la prochaine version soit publiée:
Mapper.CreateMap<Test, Test>()
.ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray));
Mise à jour:
Depuis la version 2.1.265.0, vous pouvez utiliser la propriété AllowNullCollections
:
Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();
Je pense que c'est juste une bizarrerie d'utiliser exactement le même type pour la source et la destination. Si vous en faites des types différents, le tableau d'octets apparaît comme null.