如果某些属性具有不同类型且名称相同,如何忽略映射?默认情况下是抛出错误。 我发现一些老版本的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