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

如何使用Mapster将类层次结构映射为扁平化DTO

解决Mapster多态映射问题

要让派生类的属性也能正确映射到DTO,需要给每个派生类单独配置映射规则,并将这些规则关联到基类的映射配置中,具体步骤如下:

1. 配置派生类到DTO的映射

分别为Motor和Battery配置到DeviceDto的映射,确保派生类的属性能被正确映射:

// 配置Motor到DeviceDto的映射
TypeAdapterConfig.NewConfig<Motor, DeviceDto>()
    .Map(dest => dest.SerialCode, src => src.SerialCode);

// 配置Battery到DeviceDto的映射
TypeAdapterConfig.NewConfig<Battery, DeviceDto>()
    .Map(dest => dest.Capacity, src => src.Capacity);

2. 在基类映射中包含派生类配置

将上述派生类的映射规则关联到Device基类的映射配置里,这样Mapster在处理基类实例时,会自动识别实际的派生类型并使用对应的映射规则:

TypeAdapterConfig.NewConfig<Device, DeviceDto>()
    .Include<Motor, DeviceDto>()
    .Include<Battery, DeviceDto>();

3. 执行映射

之后再执行原有的映射代码,就能同时映射基类和派生类的属性了:

List<Device> devices = GetDevices();
var dtos = devices.Adapt<List<DeviceDto>>();

原理说明

默认情况下,Mapster只会按照基类的属性定义进行映射,不会自动识别并处理派生类的扩展属性。通过显式配置每个派生类的映射规则,并使用Include方法将其关联到基类配置,Mapster就能在运行时根据实例的实际类型,选择对应的派生类映射规则,完成完整的属性映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:35:55