You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Automapper创建等效于多段映射的单行通用映射?

一行代码实现AutoMapper通用映射注册

嘿,这个需求太接地气了!你那些重复的CreateMap注册完全可以用开放泛型映射简化成一行代码,AutoMapper对开放泛型的支持刚好能完美解决这个问题。

直接上解决方案:

cfg.CreateMap(typeof(Nullable<>), typeof(PropertyModel<>)).ConvertUsing(typeof(ValueToPropertyModelConverter<>));

为啥这行代码能覆盖所有场景?

  • Nullable<>是.NET值类型可空的开放泛型定义,AutoMapper会自动匹配所有具体的可空值类型(比如int?、double?)
  • 对于string这种引用类型,本身自带可空性,AutoMapper的开放泛型匹配逻辑会自动将它纳入范围,所以string→PropertyModel<string>的映射也会被覆盖
  • 只要你的ValueToPropertyModelConverter<T>是基于开放泛型实现的(比如实现ITypeConverter<T, PropertyModel<T>>接口),这个注册就会自动应用到所有对应的源-目标类型对,再也不用逐个手动写重复代码了

如果你的转换器还没改成开放泛型,只需要调整一下定义就行,比如:

public class ValueToPropertyModelConverter<T> : ITypeConverter<T, PropertyModel<T>>
{
    public PropertyModel<T> Convert(T source, PropertyModel<T> destination, ResolutionContext context)
    {
        // 这里写你的转换逻辑
        return new PropertyModel<T> { Value = source };
    }
}

这样一行代码就完全替代了你之前所有重复的映射注册,既简洁又好维护!

内容的提问来源于stack exchange,提问作者Riana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:55:08