与类型对象映射时,AutoMapper会忽略成员失败
使用AutoMapper,我试图映射两种类型,我通过反射从两个不同的组件中抽取出来。 但是,使用类型时,我无法使.ForMember()方法忽略我指定的任何成员。 常规的lambda语法不会编译,因为在类的Type
类型上找不到成员名称。 传递成员的字符串允许编译,但仍不会忽略成员。 使用config.AssertConfigurationIsValid()表明这是一个无效的配置。
class ExampleSchema
{
public int Age {get; set;}
}
class ExampleDto
{
public int Age {get; set;}
public int Weight {get; set;}
}
在反映上述程序集的代码中:
var schemaType = typeof(ExampleSchema);
var dtoType = typeof(ExampleDto);
// This will throw
// Cannot convert lambda expression to string because it is not a delegate type
cfg.CreateMap(schemaType, dtoType)
.ForMember(dest => dest., opt => opt.Ignore());
// Hard-code cringing aside, this still does not filter out the member
cfg.CreateMap(schemaType, dtoType)
.ForMember("Weight", opt => opt.Ignore());
这是AutoMapper中的一个错误还是我错误地使用了方法?
我写了一个小测试来看看发生了什么
[TestMethod]
public void TestMethod3()
{
var schemaType = typeof(ExampleSchema);
var dtoType = typeof(ExampleDto);
MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.CreateMap(schemaType, dtoType)
.ForMember("Weight", conf => conf.Ignore());
});
config.AssertConfigurationIsValid();
var mapper = config.CreateMapper();
var schema = new ExampleSchema { Age = 10 };
var dto = mapper.Map<ExampleDto>(schema);
Assert.AreEqual(dto.Age, 10);
Assert.AreEqual(dto.Weight, 0);
}
它是绿色的。 你甚至不需要配置任何东西。
公开并使用你的属性
cfg.CreateMap<ExampleSchema, ExampleDto>()
。 然后,您将可以访问接受Expression参数的ForMember重载。
链接地址: http://www.djcxy.com/p/37413.html上一篇: AutoMapper ignore member failing when mapping with Type objects
下一篇: AutoMapper Project().To() and sorting a child collection