Automapper stelt een array-eigenschap in op een array met een lengte nul in plaats van nul

Ik gebruik Automapper om waarden van het ene exemplaar naar het andere te kopiëren en ik merk dat als de klasse een array-eigenschap heeft en de broninstantie de eigenschap heeft ingesteld op null , Automapper de bestemming instelt eigenschap naar een array met een lengte nul in plaats van null zoals ik verwachtte.

Is er een manier om Automapper te configureren om de bestemming in te stellen op null wanneer de bron null is?

In het geval dat mijn uitleg onduidelijk is, illustreert de volgende code wat ik probeer te beschrijven:

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();

        var test1 = new Test { Int = 123, NullableInt = null, ByteArray = null };
        var test2 = Mapper.Map(test1);

       //test1:  Int == 123, NullableInt == null, ByteArray == null
       //test2:  Int == 123, NullableInt == null, ByteArray == byte[0]  <-- expect this to be null
    }
}
21

2 antwoord

Ik heb vastgesteld dat dit al is gemeld als een probleem en er is een nieuwe configuratieoptie toegevoegd (zie dit plegen ). Op dit moment is de optie niet in de release beschikbaar via NuGet, maar ik heb een manier gevonden om dit te verhelpen totdat de volgende versie wordt uitgebracht:

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

Bijwerken:

Vanaf versie 2.1.265.0 kunt u de eigenschap AllowNullCollections gebruiken:

Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap();
38
toegevoegd
Het lijkt niet op een wereldwijd niveau te werken.
toegevoegd de auteur DonO, de bron
Bedankt voor de update!
toegevoegd de auteur hB0, de bron

Ik vind dit gewoon een gril van het gebruik van exact hetzelfde type voor zowel de bron als de bestemming. Als u ze daadwerkelijk van een ander type maakt, komt de bytearray door als nul.

0
toegevoegd
Ik dacht hetzelfde en maakte een class Target , dezelfde eigenschappen als Test , toegewezen Test aan Doel en de array-eigenschap was nog steeds ingesteld op een array met een lengte nul.
toegevoegd de auteur Jeff Ogata, de bron
2.0 - de versie gedownload van NuGet
toegevoegd de auteur Jeff Ogata, de bron
Als u uw code aan uw antwoord toevoegt, kan ik het aan mijn kant proberen (misschien pas later op de avond als ik het werk ga verlaten).
toegevoegd de auteur Jeff Ogata, de bron
+1, bedankt voor het nemen van de tijd om te verifiëren.
toegevoegd de auteur Jeff Ogata, de bron
Welke versie van Automapper - 1.x of 2.x? Ik denk dat ik heb getest onder 2.x en mijn bestemmingsklasse heeft een nul gekregen voor de byte [].
toegevoegd de auteur PatrickSteele, de bron
Doh! Was gewoon mijn code aan het opruimen om het te plaatsen en merkte op dat toen ik jouw code kopieerde om het te converteren naar een aparte bron en bestemming klassen, ik alles BEPAALDE de Map call repareerde. Ik deed nog steeds Map (src) in plaats van Map (src). Toen ik het had opgelost, zag ik hetzelfde probleem als dat je hebt gepost.
toegevoegd de auteur PatrickSteele, de bron