AutoMapper在映射列表時可能忽略某些屬性嗎?例如,我有兩個類Metadata和MetadataInput。AutoMapper在映射列表時忽略屬性
兩者都有相同的字段,除了目的地「MetadataInput」,它有一個額外的字段。
Mapper.CreateMap <IList<Metadata>, IList<MetadataInput>>()
我試圖使用formember選項,但它產生的錯誤,可能是因爲當你想映射列表中的屬性不能用?如果是,是否有替代解決方案?
AutoMapper在映射列表時可能忽略某些屬性嗎?例如,我有兩個類Metadata和MetadataInput。AutoMapper在映射列表時忽略屬性
兩者都有相同的字段,除了目的地「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);
通常你應該永遠映射列表或集合。您映射這些類,然後AutoMapper負責其餘的部分。 –
嘗試Mapper.CreateMap()並將其添加到列表中 –