我的课程很少,他们有多个列表项,如下所示:
public class Request1
{
public List<AdditionalApplicantData> AdditionalApplicantData { get; set;}
public List<ApplicantData> ApplicantData { get; set; }
}
public class Request2
{
public List<ApplicantDetails> ApplicantData { get; set; }
}
我想将Request1
映射到Request2
,但ApplicantData
的列表必须从多个来源映射,例如ApplicantData
&amp;列表。 AdditionalApplicantData
列表但不确定如何实现它可以有人请帮助我吗?
答案 0 :(得分:0)
您可以使用createMap()
功能使用下面的功能。资料来源:https://github.com/AutoMapper/AutoMapper/wiki/Before-and-after-map-actions
.AfterMap((src, dest) => {
dest.ApplicantData = /*your logic here*/
});
您应该将ApplicantData标记为don't map
,因为您在源类中有一个名为ApplicantData
的变量。你应该自己实现逻辑。
编辑: 初始化映射器时,为每个对象创建映射。所以对于你的情况来说就像是:
Mapper.Initialize(cfg => {
cfg.CreateMap<Request1, Request2>()
.ForMember(x => x.ApplicantData, opt => opt.Ignore()) //You want to implement your logic so ignore mapping
.AfterMap((src, dest) =>
{
dest.ApplicantData = /*implement your logic here*/
});
});
答案 1 :(得分:0)
public class ApplicantDetailsResolver : IValueResolver<Request1, Request2, List<ApplicantDetails>>
{
public List<ApplicantDetails> Resolve(Request1 source, Request2 destination,List<ApplicantDetails> destMember, ResolutionContext context)
{
destination.ApplicantDetails = context.Mapper.Map<List<ApplicantDetails>>(source.ApplicantData);
for (int i = 0; i < destination.ApplicantDetails.Count(); i++)
{
context.Mapper.Map(source.AdditionalApplicantData.ElementAt(i), destination.ApplicantDetails.ElementAt(i));
}
return destination.ApplicantDetails;
}
}
我已经为多个来源的映射列表编写了上面的自定义值解析器,并且它的工作正常但问题是,它是否无法匹配不同命名的属性,我是否可以处理这种情况?