Ich stehe vor einem Problem mit AutoMapper 2.1.267.0, wenn ich mit Objekten arbeite, die Sammlungen abgeleiteter Klassen enthalten. Ich habe mein Problem in einem einfacheren Szenario mit den folgenden Klassen isoliert:AutoMapper funktioniert nicht mit Auflistung abgeleiteter Klassen
public class ClassABase
{
public string Name { get; set; }
}
public class ClassA : ClassABase
{
public string Description { get; set; }
}
public class ClassBBase
{
public string Title { get; set; }
}
public class ClassB : ClassBBase
{
public string Text { get; set; }
}
public class ContainerA
{
public IList<ClassA> ClassAList { get; set; }
public ClassA ClassA { get; set; }
}
public class ContainerB
{
public IList<ClassB> ClassBList { get; set; }
public ClassB ClassB { get; set; }
}
und diese Zuordnungen
public class ClassABaseToClassBBase : Profile
{
protected override void Configure()
{
CreateMap<ClassABase, ClassBBase>()
.Include<ClassA, ClassB>()
.ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Name));
Mapper.AssertConfigurationIsValid();
}
}
public class ClassAToClassB : Profile
{
protected override void Configure()
{
CreateMap<ClassA, ClassB>()
.ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Description));
Mapper.AssertConfigurationIsValid();
}
}
public class ContainerAToContainerB : Profile
{
protected override void Configure()
{
CreateMap<ContainerA, ContainerB>()
.ForMember(dest => dest.ClassBList,
opt => opt.MapFrom(src => Mapper.Map<IList<ClassA>, IList<ClassB>>(src.ClassAList)))
.ForMember(dest => dest.ClassB, opt => opt.MapFrom(src => src.ClassA));
}
}
ist die Initialisierung
Mapper.Initialize(x =>
{
x.AddProfile<ClassABaseToClassBBase>();
x.AddProfile<ClassAToClassB>();
x.AddProfile<ContainerAToContainerB>();
});
und ein Diagramm einer Zusammenfassung alles (Rote Pfeile stellen AutoMapper-Zuordnungen dar.
Ich habe eine ContainerA-Instanz ContainerB zugeordnet. Dieses erste Szenario funktioniert ordnungsgemäß. Das Zielobjekt ist vollständig, wie es im Bild unten gefüllt:
Aber wenn ich diese Zuordnung
public class ClassBBaseToClassB : Profile
{
protected override void Configure()
{
CreateMap<ClassBBase, ClassB>()
.ForMember(dest => dest.Text, opt => opt.Ignore());
Mapper.AssertConfigurationIsValid();
}
}
Mapper.Initialize(x =>
{
x.AddProfile<ClassABaseToClassBBase>();
x.AddProfile<ClassAToClassB>();
x.AddProfile<ClassBBaseToClassB>();
x.AddProfile<ContainerAToContainerB>();
});
das Ergebnis ist
hinzufügen
Die Eigenschaften "Text" aller Elemente der Auflistung werden null. Wie Sie im Bild sehen können, ist die Eigenschaft "Text" des Objekts containerB.ClassB immer noch korrekt zugeordnet. Dies tritt nur bei Sammlungen auf. Ich weiß nicht, was passiert. Irgendwelche Hinweise?
Dank
welche Ergebnisse erwarten Sie? – Cybermaxs
Ich erwartete, dass alle Elemente von containerB.ClassBList vollständig gefüllt sind und keine Null-Eigenschaften haben. – peflorencio