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

如何解决Mapster嵌套映射时MapContext.Current为null的问题

问题根因

你遇到的空引用异常是因为Mapster默认不会将顶层映射上下文自动传递到嵌套的集合元素转换流程中,因此执行Foo到Bar的映射规则时MapContext.Current为空。

解决方案

这里提供两种可行方案,按需选择即可:

方案1:手动传递上下文到嵌套映射

修改Src到Dst的映射配置,在嵌套集合转换时显式传入当前上下文:

TypeAdapterConfig<Src, Dst>
    .NewConfig()
    // 显式将当前上下文传递给Foos到Bars的转换
    .Map(d => d.Bars, s => s.Foos.Adapt<IEnumerable<Bar>>(MapContext.Current))
    .Map(d => d.Name, s => (string)MapContext.Current.Parameters["prefix"]);

方案2:开启上下文自动传递

如果需要全局所有映射都支持上下文传递,配置全局规则即可:

TypeAdapterConfig.GlobalSettings.Default.PreserveContext = true;

如果仅需要针对Src到Dst的映射开启,单独配置对应映射规则:

TypeAdapterConfig<Src, Dst>
    .NewConfig()
    .PreserveContext(true) // 开启当前映射的上下文自动传递
    .Map(d => d.Bars, s => s.Foos)
    .Map(d => d.Name, s => (string)MapContext.Current.Parameters["prefix"]);

补充说明

你提供的示例代码中Src初始化存在笔误,Foos需要赋值为Foo类型数组,修正后代码如下:

var src = new Src 
{
    Foos = new [] { new Foo { Name = "test" } }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:54:01