Automapper map from one object to nested objects
For me it was possible to use just MapFrom (without ResolveUsing what gives you a chance to use this mapping with IQueryable extensions). So you will get the following in the Automapper configuration:
Mapper.CreateMap<DTOObject, SubObject>()
.ForMember(dest => dest.SubPropText, opt => opt.MapFrom(x => x.BottomText))
.ForMember(dest => dest.SubPropFont, opt => opt.MapFrom(x => x.BottomFont));
Mapper.CreateMap<DTOObject, MainObject>()
.ForMember(dest => dest.SubPart, opt => opt.MapFrom(x => x));
I ended up creating my own value resolvers for any SubObjects of MainObject
that come from DTOObject
.
public class PartResolver<T> : ValueResolver<DTOObject, T>
{
protected override T ResolveCore(DTOObject source)
{
return Mapper.Map<T>(source);
}
}
Then in my Automapper config I create a map from the DTOObject
to SubObject
and use the ValueResolver to map that object into the MainObject
Mapper.CreateMap<DTOObject, SubObject>();
Mapper.CreateMap<DTOObject, MainObject>()
.ForMember(dest => dest.SubPart, opt => opt.ResolveUsing<PartResolver<SubObject>>());