如何忽略 AutoMapper 中的源属性

问题描述 投票:0回答:1

假设您有 DTO 和实体之间的映射。假设 DTO 包含一些您不希望映射到实体的属性。我如何告诉 Automapper 不映射此属性?我知道您可以告诉 Automapper 不要映射目标属性。但是,这对我没有帮助,因为我想告诉 Automapper 不要映射源属性。这是一个例子:

public class MyDto
{
    int A { get; set; }
    int B { get; set; }
    int DoNotMapMeToTheEntity { get; set; }

}

public class MyEntity
{
    int A { get; set; }
    int B { get; set; }
}

如您所见,我不希望 Automapper 将

DoNotMapMeToTheEntity
映射到
MyEntity
。现在,你可能会说,既然
DoNotMapMeToTheEntity
不存在于
MyEntity
中,Automapper 就不会映射它,所以我没什么可担心的。但如果将来有人将
DoNotMapMeToTheEntity
添加到
MyEntity
呢?现在 Automapper 会映射它,这是我不想要的。

我寻找忽略源属性的选项,但找不到它。

c# automapper
1个回答
0
投票

只需使用

ForMember(x => x.C, opt => opt.Ignore()
,如下所示:

    public class MySrc
    {
        public int A { get; set; }
        public int B { get; set; }
        public int C { get; set; }
    }
    public class MyDest
    {
        public int A { get; set; } = 1;
        public int B { get; set; } = 1;
        public int C { get; set; } = 1;
    }
var src = new MySrc { A = 5, B = 6, C = 7 };
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<MySrc, MyDest>().ForMember(x => x.C, opt => opt.Ignore());
});

var mapper = new Mapper(config);
MyDest dest = mapper.Map<MyDest>(src);

Console.WriteLine(JsonSerializer.Serialize(dest));

测试结果
enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.