我想映射外部API的响应,类似于以下代码
public class ListOfPersons
{
public IEnumerable<Person> Persons { get; set; }
public class Person {
public string Name { get; set; }
}
}
我想映射到MyPersonObject的IEnumerable
public MyPersonObject
{
public string Name { get; set; }
}
我有以下Automapper Profiler
CreateMap<Person, MyPersonObject>();
CreateMap<ListOfPersons, IEnumerable<MyPersonObject>>()
.BeforeMap((src, dest) =>
{
src.Data = src.Data.Take(24).ToList();
})
.ConvertUsing<GenericListOfPersonsConverter>();
class DataPointConverter : ITypeConverter<ListOfPerson, IEnumerable<MyPersonObject>>
{
public IEnumerable<MyPersonObject> Convert(ListOfPersons source,
IEnumerable<MyPersonObject> destination, ResolutionContext context)
{
return source.Persons.Select(Mapper.Map<MyPersonObject>);
}
}
正如您在代码中看到的那样,我希望只获得24个第一人,但是当我执行映射时
var mapperObject = Mapper.Map<IEnumerable<MyPersonObject>(source);
mappedObject包含超过24个元素,从不执行beforeMap。任何想法,因为beforeMap被忽略了?
谢谢!
答案 0 :(得分:2)
不为类型转换器调用BeforeMap。在转换器中写下事件代码。
答案 1 :(得分:2)
我认为有两个问题。第一个:你不应该映射到IEnumerable,因为mapper已经知道如何映射到Enumerable :)。您可以创建一个新的列表对象(MyPersonObjectList)。第二个:是否有可能改变转换器并在那里得到24个人?
cross-env BABEL_DISABLE_CACHE=1 NODE_ENV=test node --harmony_proxies node_modules/.bin/jest .