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 關注
- 1704 瀏覽
添加回答
舉報
0/150
提交
取消