2017-08-01 50 views
0

如果某些属性具有不同类型且名称相同,如何忽略映射?默认情况下是抛出错误。 我发现一些老版本的automapper的答案,但他们没有与最新的工作。使用最新版本的Automapper(6.1.1)忽略所有具有不同类型和名称的成员的映射(6.1.1)

例如,一个属性是字符串,另一个是bool,但它们都具有相同的名称。我想要的行为是忽略它们(不要尝试映射它们)。

+1

你的意思是 “不同类型”?就像一个是DateTime,一个是字符串,或类似的东西?而你的意思是“忽略映射”,你想排除它们?请编辑您的问题以显示您正在尝试执行的操作的示例,并解释它为什么“无法正常工作”。 – stuartd

回答

0

这里正是基于这种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; } 
} 
+1

这就是想法,但可能代码会更好用ForAllPropertyMaps。 –

+0

没错,但我不想投入太多时间,当OP没有努力发布详细信息的问题;) – Ben

+0

答案是我一直在寻找的!工作很棒! – BladeMaster

相关问题