C# 自动映射从一个对象到嵌套对象
使用Automapper 2.0映射内部对象的最佳方式是什么C# 自动映射从一个对象到嵌套对象,c#,automapper,automapper-2,C#,Automapper,Automapper 2,使用Automapper 2.0映射内部对象的最佳方式是什么 使用此(Automapper 1.0)中的解决方案 创建自定义值解析程序 public class CustomResolver : ValueResolver<DTOObject, SubObject> { protected override SubObject ResolveCore(DTOObject source) { return Mapp
public class CustomResolver : ValueResolver<DTOObject, SubObject>
{
protected override SubObject ResolveCore(DTOObject source)
{
return Mapper.Map<DTOObject, SubObject>(source);
}
}
public class CustomResolver : ValueResolver<DTOObject, SubObject>
{
protected override SubObject ResolveCore(DTOObject source)
{
return Mapper.Map<DTOObject, SubObject>(source);
}
}
公共类CustomResolver:ValueResolver
{
受保护的覆盖子对象ResolveCore(DTOOObject源)
{
返回Mapper.Map(源);
}
}
我最终为来自DTOObject
的main object
的任何子对象创建了自己的值解析器
public class PartResolver<T> : ValueResolver<DTOObject, T>
{
protected override T ResolveCore(DTOObject source)
{
return Mapper.Map<T>(source);
}
}
对我来说,只使用MapFrom是可能的(而不必使用什么使您有机会将此映射与IQueryable扩展一起使用)。 因此,您将在Automapper配置中获得以下内容:
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));
Mapper.CreateMap()
.FormMember(dest=>dest.subspText,opt=>opt.MapFrom(x=>x.BottomText))
.ForMember(dest=>dest.subspfont,opt=>opt.MapFrom(x=>x.BottomFont));
Mapper.CreateMap()
.FormMember(目标=>目标子部分,选项=>选项映射自(x=>x));
最新版本的AutoMapper不提供ResolveUsing。因此,剩下的唯一选项是使用MapFrom。(使用@ZedRoth解决方案)。您可以控制DTOObject的设计吗?可以,也可以。这是一个使用量很大的旧数据库。DTOObject到MainObject还是MainObject到DTOObject?最好使用Mapper.CreateMap().FormMember(d=>d.TopObject,mc=>mc.MapFrom(s=>new SubObject()){subspText=s.TopText,subspfont=s.TopFont}));
还要注意,在CustomResolver中不应该调用Mapper.Map(),应该使用源中的属性创建子对象并返回该子对象。
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));