我正在尝试将包含数组的对象映射到没有数组的对象列表中。例如:
假设我有这个对象:
public class SourceInformation {
public decimal Id { get; set; }
public Person[] People { get; set; }
...
}
人员班:
public class Person {
public string First { get; set; }
public string Last { get; set; }
public string Middle { get; set; }
}
我想映射到该对象:
public class Destination {
public decimal Id { get; set; }
public string Name { get; set; }
...
}
但是我想要的是,如果我的Person
属性中有N个People
对象,则在映射Destination
时我希望有N个<SourceInformation, Destination>
对象作为回报
每个Destination
对象应该具有相关的名称信息,但是它们都具有相同的Id
属性。
如何告诉Automapper 1个SourceInformation对象映射到N个目标对象?
答案 0 :(得分:0)
弄清楚了。我最终创建了一个自定义的Converter和Profile。
个人资料:
public class MapperProfile : Profile {
public MapperProfile() {
CreateMap<SourceInformation, Destination>().ForMember(....);
CreateMap<SourceInformation, IEnumerable<Destination>>().ConvertUsing<CustomConverter>();
}
}
转换器:
public class CustomConverter : ITypeConverter<SourceInformation, IEnumerable<Destination>> {
public IEnumerable<Destination> Convert(SourceInformation source, IEnumerable<Destination> destination, ResolutionContext context) {
var destinations = new List<Destination>();
foreach (var person in source.People) {
var destination = context.Mapper.Map<Destination>(source);
destination.Name = NameUtilStatic.FormatName(person.Name);
destinations.Add(destination);
}
return destinations;
}
}
然后只需调用映射器(我使用的是DI注入映射器),就像说_mapper.Map<SourceInformation, IEnumerable<Destination>>(source);
您必须先加载个人资料。类似于:Mapper.Initialize(cfg => { cfg.AddProfile<MapperProfile>(); });
可以在此处找到更多示例:https://docs.automapper.org/en/stable/Configuration.html