如何使用AutoMapper将含嵌套列表的AssetDTO映射至Asset模型?
使用AutoMapper将AssetDTO映射到Asset模型的解决方案
核心差异在于:AssetDTO包含MetricDataDTO集合,而Asset模型是单个Value和Flow字段,需要明确从集合中取哪一项属性完成映射(以下示例默认取集合第一个元素,可根据需求调整逻辑)。
1. 安装AutoMapper包
未安装的话,通过NuGet包管理器控制台执行:
Install-Package AutoMapper
或.NET CLI:
dotnet add package AutoMapper
2. 配置映射规则
创建映射配置类:
using AutoMapper; public class MappingProfile : Profile { public MappingProfile() { CreateMap<AssetDTO, Asset>() // 映射同名属性 .ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Code)) .ForMember(dest => dest.CodeType, opt => opt.MapFrom(src => src.CodeType)) // 从Data集合第一个元素取Value,兼容集合为空的情况 .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Data?.FirstOrDefault()?.Value)) // 同理映射Flow字段 .ForMember(dest => dest.Flow, opt => opt.MapFrom(src => src.Data?.FirstOrDefault()?.Flow)); } }
3. 执行映射操作
初始化映射器并完成转换:
// 初始化映射器 var config = new MapperConfiguration(cfg => cfg.AddProfile<MappingProfile>()); var mapper = config.CreateMapper(); // 示例DTO对象 var assetDto = new AssetDTO { Code = "ASSET001", CodeType = "EQUIPMENT", Data = new List<MetricDataDTO> { new MetricDataDTO { Value = "100", Flow = "IN" } } }; // 执行映射 var assetModel = mapper.Map<Asset>(assetDto);
边界情况处理
如果Data集合为空或null,上述配置会将Value和Flow设为null。需要默认值的话,可修改映射逻辑:
.ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Data?.FirstOrDefault()?.Value ?? "DEFAULT"))
内容的提问来源于stack exchange,提问作者Teckniel
相关产品推荐
相关产品推荐

