使用最新版本的 Automapper(6.1.1) 忽略所有具有不同类型和相同名称的成员的映射
Ignore mapping for all members with different types and same name, using newest version of Automapper(6.1.1)
如果某些属性具有不同类型但名称相同,我该如何忽略映射?默认情况下它抛出错误。
我找到了一些旧版本自动映射器的答案,但它们不适用于最新版本。
例如,一个 属性 是字符串,另一个是布尔值,但它们具有相同的名称。我想要的行为是忽略它们(而不是尝试映射它们)。
这是基于此的一个小例子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; }
}
如果某些属性具有不同类型但名称相同,我该如何忽略映射?默认情况下它抛出错误。 我找到了一些旧版本自动映射器的答案,但它们不适用于最新版本。
例如,一个 属性 是字符串,另一个是布尔值,但它们具有相同的名称。我想要的行为是忽略它们(而不是尝试映射它们)。
这是基于此的一个小例子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; }
}