如何通过字典动态配置AutoMapper成员映射?
如何通过字典遍历配置AutoMapper属性映射?
类定义与映射字典
源类:
public class MyClass { public string Name { get; set; } public int Height { get; set; } }
目标类:
public class MiaClasse { public string Nominativo { get; set; } //Name public int Altezza { get; set; } //Height }
已有的属性映射字典:
var alreadyExistingDictionary = new Dictionary<string, string> { { "Name", "Nominativo" }, { "Height", "Altezza" } };
实现方案
你的伪代码思路完全可行,AutoMapper支持通过遍历字典动态添加属性映射,以下是可直接运行的实现代码:
方式1:在Profile中配置(推荐)
public class MyMappingProfile : Profile { public MyMappingProfile(Dictionary<string, string> mappingDict) { var map = CreateMap<MyClass, MiaClasse>(); foreach (var kvp in mappingDict) { // kvp.Key = 源类属性名,kvp.Value = 目标类属性名 map.ForMember(kvp.Value, opt => opt.MapFrom(kvp.Key)); } } }
方式2:直接在配置初始化时添加
var config = new MapperConfiguration(cfg => { var map = cfg.CreateMap<MyClass, MiaClasse>(); foreach (var kvp in alreadyExistingDictionary) { map.ForMember(kvp.Value, opt => opt.MapFrom(kvp.Key)); } }); // 验证配置是否正确(可选,用于提前排查属性匹配问题) config.AssertConfigurationIsValid(); // 创建映射器实例 var mapper = config.CreateMapper();
说明
ForMember方法第一个参数传入目标类的属性名,第二个参数通过MapFrom指定源类对应的属性名,完全匹配你伪代码的逻辑。- 如果字典中的属性名与类实际属性名不匹配,AutoMapper会在调用
AssertConfigurationIsValid()时抛出异常,可提前发现配置错误。
内容的提问来源于stack exchange,提问作者Daniele Arrighi
相关产品推荐
相关产品推荐

