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

如何配置Mapster,使其通过A->B与B->C映射实现A->C转换?

可以通过Mapster的链式映射实现A->C的转换

是的,你完全可以配置Mapster复用已有的A->B和B->C映射规则,通过A→B→C的路径完成A到C的转换,无需单独编写A与C的直接映射配置。

实现方法

在你的AddMappings方法中,为A→C添加一个映射配置,明确指定通过先转换为B再转换为C的方式完成映射:

public void AddMappings()
{
    // 已有的A→B映射
    TypeAdapterConfig<A, B>
      .ForType()
      .Map(dest => dest.Value1, src => ConvertToInt(src.Value1));
    
    // 已有的B→C映射
    TypeAdapterConfig<B, C>
      .ForType()
      .Map(dest => dest.Value2, src => ConvertToInt(src.Value2));
    
    // 新增A→C的链式映射配置
    TypeAdapterConfig<A, C>
      .ForType()
      .MapWith(src => src.Adapt<B>().Adapt<C>());
}

原理说明

  • 当调用a.Adapt<C>()时,Mapster会先使用你已配置的A→B规则将A对象转换为B对象,其中Value1会通过ConvertToInt完成字符串到整数的转换。
  • 接着,再使用已配置的B→C规则将B对象转换为C对象,此时Value2会通过ConvertToInt完成字符串到整数的转换。
  • 这种方式完全复用了已有的映射逻辑,避免了重复编写属性映射代码。

验证示例

假设你有一个A对象:

var a = new A { Value1 = "123", Value2 = "456" };

调用转换后:

var c = a.Adapt<C>();
// c.Value1 会是 123(来自A→B的转换)
// c.Value2 会是 456(来自B→C的转换)

这样就完全符合你的需求,无需单独配置A与C的直接映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:00:47