自动映射从一个对象到嵌套对象的映射

时间:2012-02-02 10:34:21

标签: c# automapper automapper-2

使用Automapper 2.0映射内部对象的最佳方法是什么

  1. 使用此question中的解决方案(Automapper 1.0)

  2. 创建自定义值解析器

  3. 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; }
    }
    
  4. 自定义值解析器

        public class CustomResolver : ValueResolver<DTOObject, SubObject>
        {
            protected override SubObject ResolveCore(DTOObject source)
            {
                return Mapper.Map<DTOObject, SubObject>(source);
            }
        }
    

3 个答案:

答案 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 解决方案)。