39

我正在尝试使用多级成员映射对象:这些是类:

 public class Father
    {
        public int Id { get; set; }
        public Son Son { get; set; }
    }

    public class FatherModel
    {
        public int Id { get; set; }
        public int SonId { get; set; }
    }

    public class Son
    {
        public  int Id { get; set; }
    }

这就是我尝试自动映射它的方式:

 AutoMapper.Mapper.CreateMap<FatherModel , Father>()
                      .ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId));

这是我得到的例外:

表达式 'dest => Convert(dest.Son.Id)' 必须解析为顶级成员,而不是任何子对象的属性。在子类型或 AfterMap 选项上使用自定义解析器。参数名称:lambdaExpression

谢谢

4

3 回答 3

46

这适用于映射到新对象或现有对象。

Mapper.CreateMap<FatherModel, Father>()
    .ForMember(x => x.Son, opt => opt.MapFrom(model => model));
Mapper.CreateMap<FatherModel, Son>()
    .ForMember(x => x.Id, opt => opt.MapFrom(model => model.SonId));
于 2013-03-21T19:11:26.520 回答
20
    AutoMapper.Mapper.CreateMap<FatherModel, Father>()
                     .ForMember(x => x.Son, opt => opt.ResolveUsing(model => new Son() {Id = model.SonId}));

如果它变得更复杂,您可以编写一个 ValueResolver 类,请参见此处的示例 - http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers

于 2013-03-21T18:56:33.277 回答
12

使用 ForPath 而不是 ForMember & 它就像魔术一样工作。

于 2019-01-25T16:54:28.493 回答