I have flattened list of objects with looks like this:
//SOURCE OBJECT
public class SourceObject
{
public string Code { get; set; }
public string Name { get; set; }
public string ImageUri1 { get; set; }
public string ImageUri2 { get; set; }
public string ImageUri3 { get; set; }
// etc...
}
//TARGET OBJECT
public class TargetObject
{
public string Code { get; set; }
public string Name { get; set; }
public List<TargetObjectImage> Images {get;set;}
}
public class TargetObjectImage
{
public string Name { get; set; }
public string ImageUri { get; set; }
}
I need to map some properties of SourceObject to nested collection TargetObjectImage with is navigation property of TargetObject.
So actually, I'd like to call "UNPIVOT" operation. Also source data structure does not always have to store all images, in this case ImageUri... property will by empty and should not be added to nested collection.
public class SourceObjectProfile : Profile
{
public SourceObjectProfile()
{
var map = CreateMap<SourceObject, TargetObject>()
.ForMember(o => o.Name, o => o.MapFrom(m => m.Name))
.ForMember(o => o.Code, o => o.MapFrom(m => m.Code))
}
}
I'm using AutoMapper. Can i ask for any tips?
Here is working code:
public class CustomResolver : IValueResolver<SourceObject, TargetObject, List<TargetObjectImage>>
{
public List<TargetObjectImage> Resolve(SourceObject source, TargetObject destination, List<TargetObjectImage> destMember, ResolutionContext context)
{
return new List<TargetObjectImage>
{
new TargetObjectImage
{
Uri = source.ImageUri1
},
new TargetObjectImage
{
Uri = source.ImageUri2
},
new TargetObjectImage
{
Uri = source.ImageUri3
},
};
}
}
public class SourceObjectProfile : Profile
{
public SourceObjectProfile()
{
var map = CreateMap<SourceObject, TargetObject>()
.ForMember(o => o.Name, o => o.MapFrom(m => m.Name))
.ForMember(o => o.Code, o => o.MapFrom(m => m.Code))
.ForMember(o => o.Images, o => o.MapFrom(new CustomResolver()));
}
}