c# - AutoMapper - 如何在使用 AutoMapper.Map 时忽略源上的空字段 - 有时

标签 c# automapper

所以我们有一种情况,我们从比方说 ThingDto 进行映射。 :

public class ThingDto {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Guid? SomeNiceId { get; set; }
}

当然还有目的地站Thing :

public class Thing {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Guid? SomeNiceId { get; set; }
}

以此为背景,这是我要解决的情况: 我们将 DTO 作为公共(public)“契约(Contract)”库的一部分,任何外部解决方案都可以使用它来向我们发送数据。大多数情况下,当我们想使用AutoMapperThingDto 映射到 Thing对象,一切都是桃色的。默认情况下,值为 nullThingDto 上将“清除”Thing 上不为空的任何内容对象。

但是,我们有一种情况需要 null源成员(ThingDto)上的值只是没有映射到目标 Thing目的。我们可以用 Condition 来做到这一点在设置中,但问题是我们只想有时这样做。当我们调用 AutoMapper.Map<ThingDto, Thing>(thingDto, thing); 时,是否可以设置运行时设置? ?

这似乎对其他人来说也是一个问题 - 但无论我做什么,我都找不到任何关于它的东西。应该有某种方式来告诉AutoMapper即时我们不想映射空值,但我一无所获。

如有任何帮助,我们将不胜感激。

最佳答案

您是否考虑过为相同类型设置多个 AutoMapper 配置文件,一个包含条件,一个不包含条件,然后实例化当时有效的配置?

参见: Create two Automapper maps between the same two object types

它可能需要一个包装类来使其更易于维护,但我建议这样:

public class NormalProfile : Profile
{
    protected override void Configure()
    {
        base.CreateMap<ThingDto, Thing>();
    }
}

public class ProfileWithCondition : Profile
{
    protected override void Configure()
    {
        base.CreateMap<ThingDto, Thing>().ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));
    }
}

在使用中:

// Some code where you want to include NULL mappings would call this
var config = new MapperConfiguration(cfg => cfg.AddProfile<NormalProfile>);
config.CreateMapper.Map<ThingDto, Thing>(thing);

// Code where you don't, would do this
var config = new MapperConfiguration(cfg => cfg.AddProfile<ProfileWithCondition>);
config.CreateMapper.Map<ThingDto, Thing>(thing);

关于c# - AutoMapper - 如何在使用 AutoMapper.Map 时忽略源上的空字段 - 有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679663/

相关文章:

c# - 自定义控件中的依赖属性绑定(bind)和更新

javascript - 在嵌入式 JavaScript 中插入 AssemblyInfo(例如 DLL 版本号)

c# - 在哪里验证 ASP.Net Core 应用程序中的 AutoMapper 配置?

wcf - 如何在 Post Action 中使用 AutoMapper

c# - 在函数中验证自定义类的类型

c# - 如何使对象数组对其他函数可见

c# - AutoMapper 实现(Post Static Api)

.net - 为什么 AutoMapper 仅在列表中的第一个元素上使用我的配置?

c# - 如何在标记为内部的属性上使用 AutoMapper?

c# - 如何在 ASP.Net 页面上将 List<string> 的 URL 显示为超链接(C#)