如何解决使用AutoMapper映射时如何忽略目标集合类型属性?
我正在从输入模型(源)映射到域模型(目的地)
目标类具有一个类型为对象的列表,并且该类型具有在源列表类型上为 not 的属性
这导致以下异常
AutoMapperConfigurationException:找到了未映射的成员。评论 下面的类型和成员。
奇怪的是,当输入模型集合对象类型具有域模型集合对象类型中未包含的属性时,不会引发任何异常。反之亦然。
如何确保域模型集合对象类型上可以存在未映射到任何属性的属性?
这是MRE https://github.com/jstallm/AutomapperListIssue-MRE
在此MRE中,您可以看到输入模型具有类型为Class1InputModel的列表。 Class1InputModel具有Description属性,自动映射器完全不会抱怨。
但是,类DomainModel具有Class1DomainModel类型的列表,其中包含名为Other的字段。这是导致问题的唯一属性。本质上,在成功映射后,我希望属性“ Other”为空。
解决方法
您可以忽略此列表:
Mapper.CreateMap<SourceType,DestinationType>()
.ForMember(dst => dst.SpecialProperty,opt => opt.Ignore());
其他选项是为每个列表项类型添加映射,并仅忽略缺少属性的列表类型,然后您无需在父级映射中忽略列表,例如:
Mapper.CreateMap<SourceType,DestinationType>();
Mapper.CreateMap<SourceListItemsType,DestinationListItemsType>()
.ForMember(dst => dst.SpecialProperty1,opt => opt.Ignore()
.ForMember(dst => dst.SpecialProperty2,opt => opt.Ignore()
.ForMember(dst => dst.SpecialProperty3,opt => opt.Ignore()
.ForMember(dst => dst.SpecialProperty4,opt => opt.Ignore());
,
您定义映射的地方,例如
CreateMap<Source,Destination>();
您可以忽略下面的特定字段
CreateMap<Source,Destination>().ForMember(x => x.Destination,opt => opt.Ignore());
,
不再仅仅由于在列表本身之间创建简单的映射而抛出异常。无需忽略。
然后确保将其添加到mapperconfiguration
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。