场景如下:
源对象:
public class personSrc { public string name {get; set;} public string phone {get; set;} public string HomeAddress {get; set;} public string OfficeAddress {get; set;} }
目标对象:
public class personDest { public string name {get; set;} public string phone {get; set} public List<address> addresses {get; set;} } public class address { public string location {get; set;} public addressType type {get; set;} } public enum addressType {Office, Home}
因此,为了将地址成员从源映射到目标,我制作了这个自定义解析器:
public class CustomResolver : IValueResolver<personSrc, personDest, List<address>> { public List<address> Resolve(personSrc source, personDest destination, List<address> destMember, ResolutionContext context) { List<address> result = new List<adress>(); if(!String.IsNullOrEmpty(source.HomeAddress)) { result.add(new Address{ location = source.HomeAddress, type = addressType.Home }); } if(!String.IsNullOrEmpty(source.OfficeAddress)) { result.add(new Address{ location = source.OfficeAddress, type = addressType.Office }); } return result; } }
我面临的问题是,当我定义我这样写的探查器时,我似乎无法传递 personSrc 类:
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>(src => src) // this line is not working .ForMember(dest => dest.addresses, opt => opt.MapFrom<customResolver>() // this line is also not working
很可能我的个人资料没有正确实现,但我似乎找不到正确实现的示例。
最佳答案
您的个人资料正确。我已经尝试过您的示例,并且已成功获取映射到您的目标类的值,并且您的个人资料应如下所示:
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);
你走在正确的道路上。您可以尝试一下并告诉我这是否适合您吗?
关于c# - Automapper 自定义解析器源成员到目标对象列表映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62571951/