語境:AutoMapper:映射過程中忽略特定的單詞表項(S)
那裏,看起來像這樣2個大類:
public class Source
{
public Dictionary<AttributeType, object> Attributes { get; set; }
}
public class Target
{
public string Title { get; set; }
public string Description { get; set; }
public List<Attribute> Attributes { get; set; }
}
和子/收集/枚舉類型:
public class Attribute
{
public string Name { get; set; }
public string Value { get; set; }
}
public enum AttributeType
{
Title,
Description,
SomethingElse,
Foobar
}
目前我的地圖看起來是這樣的:
CreateMap<Source, Target>()
.ForMember(dest => dest.Description, opt => opt.MapAttribute(AttributeType.Description))
.ForMember(dest => dest.Title, opt => opt.MapAttribute(AttributeType.Title));
凡MapAttribute
得到來自Dictionary
的項目,並利用我提供的AttributeType
,將其添加到目標集合爲(名稱&值),對象(使用嘗試獲取並返回一個空如果該鍵不存在)...
這一切我的目標設定結束的這樣看後:
{
title: "Foo",
attributes: [
{ name: "SomethingElse", value: "Bar" },
{ name: "Title", value: "Foo"}
]
}
問:
如何將其餘項目映射到目標類,但我需要能夠排除特定鍵(如標題或描述)。例如。 Source.Attribute在Target中具有已定義位置的項目將從Target.Attributes集合中排除,「剩餘」屬性仍將轉到Target.Attributes。
爲了更清晰(如果我的消息來源是這樣的):
{ attributes: { title: "Foo", somethingelse: "Bar" } }
它會映射到這樣一個目標:
{ title: "Foo", attributes: [{ name: "SomethingElse", value: "Bar" }] }
我嘗試這一點,但它不編譯,說明如下:
自定義配置僅適用於某個類型的頂級個人會員。
CreateMap<KeyValuePair<AttributeType, object>, Attribute>()
.ForSourceMember(x => x.Key == AttributeType.CompanyName, y => y.Ignore())