7

Automapper2.0を使用して内部オブジェクトをマップするための最良の方法は何ですか

  1. この質問の解決策を使用してください(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; }
    }
    

カスタム値リゾルバー

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

3 に答える 3

10

私にとっては、MapFromだけを使用することができました(IQueryable拡張機能でこのマッピングを使用する機会を与えるResolveUsingなしで)。したがって、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));
于 2015-11-09T01:28:40.010 に答える
3

MainObjectから来るサブオブジェクトに対して、独自の値リゾルバーを作成することになりましたDTOObject

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

次に、Automapper構成で、からDTOObjectへのマップを作成SubObjectし、ValueResolverを使用してそのオブジェクトをにマップします。MainObject

Mapper.CreateMap<DTOObject, SubObject>();

Mapper.CreateMap<DTOObject, MainObject>()
    .ForMember(dest => dest.SubPart, opt => opt.ResolveUsing<PartResolver<SubObject>>());
于 2012-02-17T11:52:05.597 に答える
1

ResolveUsingは、最新バージョンのAutoMapperでは使用できません。したがって、残っているオプションはMapFromを使用することだけです。(@ZedRothソリューションを使用してください)。

于 2021-02-02T16:53:17.303 に答える