如果某些屬性具有不同類型且名稱相同,如何忽略映射?默認情況下是拋出錯誤。 我發現一些老版本的automapper的答案,但他們沒有與最新的工作。使用最新版本的Automapper(6.1.1)忽略所有具有不同類型和名稱的成員的映射(6.1.1)
例如,一個屬性是字符串,另一個是bool,但它們都具有相同的名稱。我想要的行爲是忽略它們(不要嘗試映射它們)。
如果某些屬性具有不同類型且名稱相同,如何忽略映射?默認情況下是拋出錯誤。 我發現一些老版本的automapper的答案,但他們沒有與最新的工作。使用最新版本的Automapper(6.1.1)忽略所有具有不同類型和名稱的成員的映射(6.1.1)
例如,一個屬性是字符串,另一個是bool,但它們都具有相同的名稱。我想要的行爲是忽略它們(不要嘗試映射它們)。
這裏正是基於這種link
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Class1, Class2>();
cfg.ForAllMaps((typeMap, mappingExpr) =>
{
var ignoredPropMaps = typeMap.GetPropertyMaps();
foreach (var map in ignoredPropMaps)
{
var sourcePropInfo = map.SourceMember as PropertyInfo;
if (sourcePropInfo == null) continue;
if (sourcePropInfo.PropertyType != map.DestinationPropertyType)
map.Ignored = true;
}
});
});
Class1 src = new Class1()
{
TestProperty = "A"
};
Class2 dest = Mapper.Map<Class1, Class2>(src);
試驗班的一個小例子:
public class Class1
{
public string TestProperty { get; set; }
}
public class Class2
{
public bool TestProperty { get; set; }
}
這就是想法,但可能代碼會更好用ForAllPropertyMaps。 –
沒錯,但我不想投入太多時間,當OP沒有努力發佈詳細信息的問題;) – Ben
答案是我一直在尋找的!工作很棒! – BladeMaster
你的意思是 「不同類型」?就像一個是DateTime,一個是字符串,或類似的東西?而你的意思是「忽略映射」,你想排除它們?請編輯您的問題以顯示您正在嘗試執行的操作的示例,並解釋它爲什麼「無法正常工作」。 – stuartd