C# AutoMapper 如何实现对象内部嵌套对象的映射
C# AutoMapper 嵌套对象映射配置方案
你当前提供的实体类存在两处问题:
- 重复定义了
Date类 Update、Update11类中未声明嵌套对象属性,无法直接实现嵌套映射,我们先假设你实际的实体结构为以下包含嵌套属性的版本:
// 示例源实体结构 public class Update { public string aa { get; set; } // 嵌套的自定义类型属性 public Date CreateDate { get; set; } } public class Date { public DateTime ww { get; set; } } // 示例目标实体结构 public class Update11 { public string aa { get; set; } // 对应的嵌套自定义类型属性 public Date CreateDate { get; set; } }
配置调整步骤
- 添加嵌套类型的映射配置
如果你的源和目标实体引用的Date是不同命名空间下的两个独立类,需要先添加Date类型的双向映射:
// 假设源Date在Domain命名空间,目标Date在Dto命名空间,按需替换为你实际的类型 CreateMap<Domain.Date, Dto.Date>().ReverseMap(); // ReverseMap() 是AutoMapper提供的快捷方法,等价于同时写正向和反向两行CreateMap
如果源和目标共用同一个Date类,可跳过这一步。
同名嵌套属性自动映射
如果嵌套属性的名称在源和目标实体中完全一致(比如都叫CreateDate),不需要额外修改你已经配置的Update和Update11的映射规则,AutoMapper默认会自动递归处理嵌套属性的映射。异名嵌套属性手动指定
如果嵌套属性名称不一致,比如Update里叫CreateDate,Update11里叫OperateDate,需要用ForMember手动指定映射关系:
CreateMap<Update, Update11>() .ForMember(dest => dest.OperateDate, opt => opt.MapFrom(src => src.CreateDate)) .ReverseMap();
功能验证
配置完成后直接调用映射方法即可,示例:
var source = new Update { aa = "测试内容", CreateDate = new Date { ww = DateTime.Now } }; // 映射后target.OperateDate.ww会自动匹配source.CreateDate.ww的值 var target = _mapper.Map<Update11>(source);
内容的提问来源于stack exchange,提问作者user1817661
相关产品推荐
相关产品推荐

