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

如何使用Mapster为所有模型全局配置LocalizedString到string映射

Mapster全局配置LocalizedString自动映射string失效修复

问题场景

  • 存在自定义值类型LocalizedString结构体,内置GetCurrentLocalization()方法,用于返回当前语言环境下的实际文本内容
  • 期望通过一次全局配置,实现所有实体转DTO场景下,源类型为LocalizedString、目标类型为string的属性自动完成转换,无需为每个实体/DTO单独编写映射规则
  • 当前编写的Mapster配置未生效,映射时默认调用LocalizedString的ToString()方法,未执行预期的GetCurrentLocalization()逻辑

实体类定义

public class TeaEntity : IEntity
{
    public Guid Id { get; init; }
    public LocalizedString Name { get; init; }
}

DTO类定义

public class TeaDto : IDto
{
    public Guid Id { get; init; }
    public string Name { get; init; }
}

失效的原有配置

config.ForType<LocalizedString, string>().Map(
        rawString => (LocalizedString)rawString,
        localized => localized.GetCurrentLocalization());

问题原因与修复方案

原有配置写法错误:

  1. Map方法的参数顺序为「目标成员选择器、源值选择器」,原有配置参数顺序颠倒,本质是在配置string到LocalizedString的反向映射,根本不会生效在LocalizedString转string的场景
  2. 全局跨类型值转换不应该用针对成员映射的Map方法,需要使用专门的类型转换配置方法MapWith

替换为以下全局配置即可:

// 注册LocalizedString -> string的全局类型转换器
config.ForType<LocalizedString, string>()
      .MapWith(src => src.GetCurrentLocalization());

配置注意事项

  • 该全局配置需要放在所有实体/DTO映射规则注册逻辑之前执行,确保Mapster在生成映射代码时能识别到该类型转换规则
  • 配置生效后,所有场景下只要遇到源类型为LocalizedString、目标类型为string的属性映射,都会自动调用GetCurrentLocalization()取值,不需要为每个实体单独写映射规则
  • 如果需要支持反向映射(string转LocalizedString),单独再写一条对应方向的MapWith配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:54:20