如何使用Mapperly生成含泛型类型的对象自动映射器?
Mapperly 泛型对象映射实现方案
问题场景
现有一对泛型类型定义:
public class Email<T> { public T message {get; set;} public string SendTo {get; set;} } public class EmailDto<T> { public T message {get; set;} public string SendTo {get; set;} }
尝试创建泛型对象映射方法时出现运行异常,原写法未在方法上声明泛型参数:
// 错误写法:未显式声明方法的泛型参数<T> public partial class MapperlyMapper { public partial Email<T> Map(EmailDto<T> sendEmailDto); }
正确实现方式
需在映射方法上显式声明泛型参数<T>,Mapperly会自动处理泛型属性的映射逻辑:
public partial class MapperlyMapper { public partial Email<T> Map<T>(EmailDto<T> sendEmailDto); }
Mapperly会为每个实际使用的具体泛型类型(如Email<string>与EmailDto<string>)自动生成对应映射代码,无需手动编写属性映射逻辑。
Mapperly 泛型映射官方文档翻译
泛型映射
Mapperly支持泛型类型的映射,可通过以下方式配置:
- 泛型映射方法:在映射方法上声明泛型参数,Mapperly会自动生成适用于所有合法具体类型参数的映射逻辑,只要类型参数间的映射关系已配置或可自动推断。
- 泛型类型映射:针对泛型类型定义映射规则(如
List<T>与IEnumerable<T>的映射),Mapperly会处理任意T类型的集合映射,前提是T的映射规则已配置。 - 约束泛型参数:可对泛型参数添加类型约束,Mapperly会识别约束并生成符合要求的映射代码,例如限制
T为引用类型或实现特定接口。
对于泛型属性,只要属性的泛型类型间存在有效映射(或类型兼容),Mapperly会自动完成属性映射,无需额外配置。
内容的提问来源于stack exchange,提问作者jezzipin
相关产品推荐
相关产品推荐

