Automapper从v3.3.1升级到v10.0.0:IgnoreUnMapped方法适配问题
AutoMapper v10 适配版 IgnoreUnMapped 扩展方法
原方法在AutoMapper v10中失效,核心原因是静态API被废弃、TypeMap相关方法发生变更,以下是适配v10版本的实现:
// 忽略所有原本会通过默认规则映射的目标属性,仅保留显式配置的映射 public static IMappingExpression<TSource, TDestination> IgnoreUnMapped<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression) { var configProvider = expression.ConfigurationProvider; // 获取或创建对应的TypeMap var typeMap = configProvider.FindTypeMapFor<TSource, TDestination>() ?? configProvider.CreateTypeMap<TSource, TDestination>(); foreach (var propertyMap in typeMap.GetPropertyMaps()) { // 筛选出:会被默认映射 + 无自定义配置的属性,进行忽略 if (propertyMap.IsMapped && !propertyMap.HasCustomMap()) { expression.ForMember(propertyMap.DestinationMember.Name, opt => opt.Ignore()); } } return expression; }
关键变更说明
- 废弃旧版静态
Mapper.FindTypeMapFor,改为从当前映射表达式的ConfigurationProvider获取配置上下文,符合AutoMapper v8+推荐的非静态API规范 - 用
GetPropertyMaps()替代旧版的GetCustomPropertyMaps(),这是v4之后TypeMap属性映射集合的标准获取方式 - 通过
IsMapped判断属性是否会被默认规则映射,HasCustomMap()判断是否存在显式自定义映射配置,两者结合精准筛选需要忽略的属性
使用注意
配置映射时,必须先定义所有显式的ForMember映射规则,再调用IgnoreUnMapped,否则你的显式配置会被覆盖忽略。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

