如何在Automapper中映射嵌套的子对象属性

时间:2017-09-04 09:48:01

标签: c# automapper

我有当前的地图:

CreateMap<Article, ArticleModel>()
    .ForMember(dest => dest.BaseContentItem, opts => opts.MapFrom(src => src.BaseContentItem))
    .ForMember(dest => dest.BaseContentItem.TopicTag, opts => opts.MapFrom(src => src.BaseContentItem.TopicTag))
    .ForMember(dest => dest.MainImage, opts => opts.MapFrom(src => src.MainImage))
    .ReverseMap();

我得到的错误是:

  

System.ArgumentException:'Expression'dest =&gt;   dest.BaseContentItem.TopicTag'必须解析为顶级成员和   不是任何子对象的属性。在孩子身上使用自定义解析器   改为输入类型或AfterMap选项。'

我该如何映射?

2 个答案:

答案 0 :(得分:21)

这应该有效。使用ForPath代替ForMember

CreateMap<Article, ArticleModel>()
    .ForMember(dest => dest.BaseContentItem, opts => opts.MapFrom(src => src.BaseContentItem))
    .ForPath(dest => dest.BaseContentItem.TopicTag, opts => opts.MapFrom(src => src.BaseContentItem.TopicTag))
    .ForMember(dest => dest.MainImage, opts => opts.MapFrom(src => src.MainImage))
    .ReverseMap();

答案 1 :(得分:0)

如果有人有问题,我就很奇怪。

我在不同的映射配置文件中正确地为所有孩子创建了地图。问题是其中一个子模型本身就有一种TopicTag,所以它使堆栈溢出。我删除了那个不必要的字段,现在它正确映射。