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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:20:29