[英]AutoMapper ignore properties while mapping a list
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);
正如其他人建議的那樣,我們應該避免映射列表和集合。 為了忽略所有未映射的屬性,以下對我有用。
CreateMap<Metadata, MetadataInput>()
.ForMember(dest => dest.Id, o => o.MapFrom(src => src.sourceIdentifier))
.ForMember(dest => dest.Name, o => o.MapFrom(src => src.sourceName))
.ForAllOtherMembers(opts => opts.Ignore());
ForAllOtherMembers 應該是方法鏈中的最后一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.