AutoMapper:“忽略其余的”?有没有办法告诉AutoMapper忽略除明确映射的属性之外的所有属性?我有外部DTO类可能会从外部更改,我想避免指定要显式忽略的每个属性,因为添加新属性会在尝试将它们映射到我自己的对象时破坏功能(导致异常)。
3 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
我已经更新了Can Gencer的扩展,不会覆盖任何现有的地图。
public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression){ var sourceType = typeof (TSource); var destinationType = typeof (TDestination); var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(sourceType) && x.DestinationType.Equals(destinationType)); foreach (var property in existingMaps.GetUnmappedPropertyNames()) { expression.ForMember(property, opt => opt.Ignore()); } return expression;}
用法:
Mapper.CreateMap<SourceType, DestinationType>() .ForMember(prop => x.Property, opt => opt.MapFrom(src => src.OtherProperty)) .IgnoreAllNonExisting();
慕婉清6462132
TA贡献1804条经验 获得超2个赞
根据我的理解,问题是目标上的字段在源中没有映射字段,这就是为什么要寻找忽略那些非映射目标字段的方法。
您可以简单地使用,而不是实现和使用这些扩展方法
Mapper.CreateMap<destinationModel, sourceModel>(MemberList.Source);
现在,automapper知道它只需要验证所有源字段是否已映射,而不是相反。
您还可以使用:
Mapper.CreateMap<destinationModel, sourceModel>(MemberList.Destination);
- 3 回答
- 0 关注
- 1660 浏览
添加回答
举报
0/150
提交
取消