AutoMapper在映射列表时忽略属性

在映射列表时,AutoMapper可能会忽略某些属性吗? 例如,我有两个类Metadata和MetadataInput。

除目标外,它们都具有相同的字段,“MetadataInput”具有额外的字段。

Mapper.CreateMap <IList<Metadata>, IList<MetadataInput>>()

我试过使用formember选项,但它会产生错误,可能是因为当您想要映射列表时,无法使用该属性? 如果是,是否有替代解决方案?


正如Darin Dimitrov所说,你不应该尝试映射列表或集合。

如果他们之间有1 - > 1的关系,只需制作一张地图:

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore());

然后你可以使用你的列表并选择它到另一个列表。

var metadataList = new List<Metadata>();

var meatadataInputList = metadataList.Select(p => Mapper.Map<MetadataInput>(p).ToList();

感谢您的有用评论。 因为这两个列表都已经在映射之前完成了,所以我这样做了:

从数据库获取列表:

List<Metadata> metadatas = _Metadataservice.GetList(_Collectionservice.Get("Koekelare").ID).ToList();

创建映射器(感谢您指出我的错误):

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore());

创建一个新列表并逐一映射新的(单个)值:

List<MetadataInput> meta = new List<MetadataInput>();
for (int i = 0; i < e.Count; i++)
{
  meta.Add(Mapper.Map<Metadata, MetadataInput>(metadatas[i], input.Metadatas[i]));
}

有人可以证实这是一个好方法吗?


使用这个映射器配置来获得所需的结果:

Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty1, t => t.Ignore());
Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty2, t => t.Ignore());
Mapper.CreateMap<Input, Output>();
listOfItems = Mapper.Map<List<Input>, List<Output>>(InputListObject);
链接地址: http://www.djcxy.com/p/37371.html

上一篇: AutoMapper ignore properties while mapping a list

下一篇: Error when using AutoMapper to map from a POCO to an NHibernate proxy object