如何在Mapster中为不同类型源字段定义条件映射?
Mapster条件映射:解决不同类型源字段的分支映射问题
你遇到的问题是因为Mapster在编译映射配置时,会严格检查源字段和目标字段的类型兼容性。即使你给第一个Map方法加了条件判断,它依然会尝试将int?类型的IntValue直接映射到string类型的Mapped,而Nullable<int>和string之间没有默认的强制转换操作符,所以抛出了类型转换异常。
不用AfterMapping也能通过Mapster原生语法解决,这里提供两种方案:
方案1:在映射表达式中直接处理类型转换与分支逻辑
直接在Map的源表达式里完成分支判断和类型转换,确保源类型和目标类型一致:
TypeAdapterConfig.GlobalSettings .NewConfig<Source, Destination>() .Map(dest => dest.Mapped, src => src.IntValue.HasValue ? src.IntValue.ToString() : src.StringValue);
方案2:使用MapWhen方法做明确的条件分支映射
Mapster提供的MapWhen方法支持针对特定条件配置独立的映射规则,每个分支都可以单独处理类型转换:
TypeAdapterConfig.GlobalSettings .NewConfig<Source, Destination>() .MapWhen(src => src.IntValue.HasValue, dest => dest.Mapped, src => src.IntValue.ToString()) .MapWhen(src => !src.IntValue.HasValue, dest => dest.Mapped, src => src.StringValue);
这两种方案都能让Mapster正确编译映射逻辑,满足你的需求:当IntValue不为null时用它的字符串形式赋值给Mapped,否则使用StringValue。
内容的提问来源于stack exchange,提问作者Aleksei Petrov
相关产品推荐
相关产品推荐

