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

Mapster映射CultureInfo遇无默认构造函数,求MapWith以外的解决方案

解决方案

方案1:使用ConstructUsing构建目标实例

在Dto到Entity的映射配置中,通过ConstructUsing直接创建Entity实例并初始化CultureInfo,其余属性由Mapster自动匹配映射(Mapster支持同名属性自动映射,且默认处理string到Guid这类基本类型转换):

TypeAdapterConfig<Dto, Entity>.NewConfig()
    .ConstructUsing(dto => new Entity
    {
        CultureInfo = CultureInfo.GetCultureInfo(dto.CultureName)
    });

这种方式无需手动映射所有属性,仅针对性处理CultureInfo的初始化逻辑,其余属性会自动完成转换。

方案2:全局注册string与CultureInfo的类型转换器

如果项目中多处需要在string和CultureInfo之间转换,可全局配置类型转换规则,后续所有相关映射都会自动复用该规则:

// 全局注册string到CultureInfo的转换逻辑
TypeAdapterConfig<string, CultureInfo>.NewConfig()
    .MapWith(cultureName => CultureInfo.GetCultureInfo(cultureName));

// 全局注册CultureInfo到string的转换逻辑(对应Entity到Dto的映射)
TypeAdapterConfig<CultureInfo, string>.NewConfig()
    .MapWith(cultureInfo => cultureInfo.Name);

完成全局配置后,原双向映射配置可简化(若属性名匹配甚至可省略显式配置):

// 仅当属性名不匹配时需显式指定,否则可省略
TypeAdapterConfig<Dto, Entity>.NewConfig()
    .Map(dest => dest.CultureInfo, src => src.CultureName);

TypeAdapterConfig<Entity, Dto>.NewConfig()
    .Map(dest => dest.CultureName, src => src.CultureInfo);

这种方式的优势是一次配置全局生效,避免在多个类的映射中重复编写CultureInfo的转换逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:15:08