使用Automapper 2.0映射内部对象的最佳方法是什么
使用此question中的解决方案(Automapper 1.0)
创建自定义值解析器
public class DTOObject
{
// MainObject
public int Id { get; set; }
public string Name { get; set; }
// SubObject (TopObject)
public string TopText { get; set; }
public string TopFont { get; set; }
// SubObject (BottomObject)
public string BottomText { get; set; }
public string BottomFont { get; set; }
}
public class MainObject
{
public int Id { get; set; }
public string Name { get; set; }
public SubObject TopObject { get; set; }
public SubObject BottomObject { get; set; }
}
public class SubObject
{
public string SubPropText { get; set; }
public string SubPropFont { get; set; }
}
自定义值解析器
public class CustomResolver : ValueResolver<DTOObject, SubObject>
{
protected override SubObject ResolveCore(DTOObject source)
{
return Mapper.Map<DTOObject, SubObject>(source);
}
}
答案 0 :(得分:5)
对我来说,可以只使用MapFrom(没有ResolveUsing,这使你有机会使用这个映射与IQueryable扩展)。 因此,您将在Automapper配置中获得以下内容:
/**
* [Integer.signum] is a static method.
*/
答案 1 :(得分:3)
我最终为来自MainObject
的{{1}}的所有子对象创建了自己的值解析器。
DTOObject
然后在我的Automapper配置中,我创建了一个从public class PartResolver<T> : ValueResolver<DTOObject, T>
{
protected override T ResolveCore(DTOObject source)
{
return Mapper.Map<T>(source);
}
}
到DTOObject
的地图,并使用ValueResolver将该对象映射到SubObject
MainObject
答案 2 :(得分:1)
ResolveUsing 不适用于最新版本的 AutoMapper。所以剩下的唯一选择是使用MapFrom。 (使用@ZedRoth 解决方案)。