与类型对象映射时,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