如何使用AutoMapper实现二维列表List<List<Item>>到List<List<Item2>>的映射
解决方案
该场景不需要编写自定义转换器,仅通过简单配置即可实现映射。
你原有代码的问题在于配置冗余,且没有告诉AutoMapper如何处理自定义集合类型ItemCollection。AutoMapper本身已经支持嵌套泛型集合的自动映射,只要配置了元素类型的映射规则,集合层的映射会自动处理,不需要单独为每一层集合显式声明映射。
修正后的核心配置
只需要保留两个映射规则即可:
var configuration = new MapperConfiguration(cfg => { // 配置基础元素的映射,因为属性名完全一致,不需要额外指定字段映射 cfg.CreateMap<Item, Item2>(); // 告诉AutoMapper将自定义集合类型ItemCollection当做其父类List<List<Item>>处理 cfg.CreateMap<ItemCollection, List<List<Item2>>>().As<List<List<Item>>>(); });
相关说明
- AutoMapper默认会自动处理实现了
IEnumerable接口的类型的集合映射,只要元素类型的映射规则存在,不管嵌套多少层集合都可以自动转换,不需要为每一层List<>单独配置映射。 - 你原有代码中显式声明的
List<List<Item>>到List<List<Item2>>、List<Item>到List<Item2>的映射都是多余的,可以直接删除。 - 因为
Item和Item2的Name属性名完全一致,ForMember的配置也可以省略。
运行修正后的代码,输出结果就是你期望的[[{"Name":"item"}]]。
内容的提问来源于stack exchange,提问作者Jacek
相关产品推荐
相关产品推荐

