如何解决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
相关产品推荐
相关产品推荐

