Automapper 自定义解析器源成员到目标对象列表映射问题
Posted
技术标签:
【中文标题】Automapper 自定义解析器源成员到目标对象列表映射问题【英文标题】:Auto mapper Custom resolver source members to destination object list mapping issue 【发布时间】:2020-10-15 17:02:38 【问题描述】:场景如下:
源对象:
公共类 personSrc 公共字符串名称 get;放; 公共字符串电话get;放; 公共字符串 HomeAddress get;放; 公共字符串 OfficeAddress get;放;
目标对象:
公开课 personDest 公共字符串名称 get;放; 公共字符串电话get;放 公共列表 地址 get;放; 公开课地址 公共字符串位置 get;放; 公共地址类型类型 get;放; 公共枚举地址类型 办公室,家庭
所以为了将地址成员从源映射到目标,我制作了这个自定义解析器:
公共类 CustomResolver : IValueResolver> public List Resolve(personSrc source, personDest destination, List destMember, ResolutionContext context) 列表 结果 = 新列表(); if(!String.IsNullOrEmpty(source.HomeAddress)) 结果.add(新地址 位置 = source.HomeAddress, 类型 = addressType.Home ); if(!String.IsNullOrEmpty(source.OfficeAddress)) 结果.add(新地址 位置 = source.OfficeAddress, 类型 = addressType.Office ); 返回结果;
我面临的问题是,当我定义我这样编写的探查器时,我似乎无法通过 personSrc 类:
CreateMap() .ForMember(dest => dest.name, opt => opt.MapFrom(src => src.name)) .ForMember(dest => dest.phone, opt => opt.MapFrom(src => src.phone)) .ForMember(dest => dest.addresses, opt => opt.MapFrom (src => src) // 这行不工作 .ForMember(dest => dest.addresses, opt => opt.MapFrom () // 这行也不行
很可能我的个人资料没有正确实施,但我似乎找不到正确实施的示例。
【问题讨论】:
【参考方案1】:您的个人资料是正确的。我已经尝试了您的示例,并且设法将值映射到您的目标类,并且您的个人资料应如下所示:
public class CustomProfiler : Profile
/// <summary>
/// Initializes a new instance of the <see cref="CustomerProfile"/> class.
/// </summary>
public CustomProfiler()
CreateMap<personSrc, personDest>()
.ForMember(dest => dest.name, opt => opt.MapFrom(src => src.name))
.ForMember(dest => dest.phone, opt => opt.MapFrom(src => src.phone))
.ForMember(dest => dest.addresses, opt => opt.MapFrom<CustomResolver>());
我已经用例子试过了:
var personSrc = new personSrc HomeAddress = "HomeAddress", OfficeAddress = "OfficeAddress", name = "name", phone = "phone" ;
var personDest = mapper.Map<personDest>(personSrc);
你在正确的轨道上。你可以试试,让我知道这是否适合你?
【讨论】:
是的,我为 IValueResolver 创建一个与 Automapper 接口冲突的接口搞砸了以上是关于Automapper 自定义解析器源成员到目标对象列表映射问题的主要内容,如果未能解决你的问题,请参考以下文章
Automapper 忽略 null 值,但将空字符串映射到 null