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

如何使用Mapster将SqlUser的Id属性映射至User的UserId属性?

Mapster 属性名不一致的自动映射及配置传入问题

一、实现自动映射的方式

因为SqlUser的Id和User的UserId属性名不匹配,Mapster默认无法自动识别,有两种可行的自动映射方案:

1. 全局约定配置

通过全局配置设置属性名匹配规则,让Mapster自动识别类似Id与[类名]Id的属性映射关系:

// 启用大小写忽略+包含匹配的策略
TypeAdapterConfig.GlobalSettings.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase | NameMatchingStrategy.Contains);

// 或者自定义更精准的匹配逻辑,专门处理Id到[目标类名]Id的映射
TypeAdapterConfig.GlobalSettings.Default.NameMatchingStrategy((sourceName, destName) =>
{
    if (sourceName == "Id" && destName.EndsWith("Id"))
        return true;
    return NameMatchingStrategy.IgnoreCase(sourceName, destName);
});

2. 局部类映射配置

针对SqlUser和User单独配置映射规则,这种方式更精准,不会影响其他类的映射逻辑:

var config = TypeAdapterConfig<SqlUser, User>.NewConfig()
    .Map(dest => dest.UserId, src => src.Id);

// 使用该配置完成映射
SqlUser sqlUser = new SqlUser { Id = 1 };
User user = sqlUser.Adapt<User>(config);

二、将泛型TypeAdapterConfiguration<T,U>传入非泛型Adapt方法

泛型的TypeAdapterConfiguration<T,U>本身继承自非泛型的TypeAdapterConfiguration类,因此可以直接将泛型配置对象强制转换为非泛型类型传入Adapt方法,示例如下:

// 创建泛型映射配置
var genericConfig = TypeAdapterConfig<SqlUser, User>.NewConfig()
    .Map(dest => dest.UserId, src => src.Id);

// 强制转换为非泛型配置后传入Adapt方法
SqlUser sqlUser = new SqlUser { Id = 2 };
User user = sqlUser.Adapt<User>((TypeAdapterConfiguration)genericConfig);

另外,也可以将泛型配置注册到全局配置中,之后直接使用无参数的Adapt方法:

// 将配置注册到全局
TypeAdapterConfig<SqlUser, User>.NewConfig()
    .Map(dest => dest.UserId, src => src.Id)
    .Register();

// 直接调用Adapt完成映射
var user = sqlUser.Adapt<User>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:42:08