如何将 Automapper 配置为在属性为 null 时忽略 Object-Properties 但在不为 null 时进行映射

How to configure Automapper to ignore Object-Properties if properties is null but map if not null

我正在使用 Automapper。在那里,我将 DTO 对象映射到另一个对象。

用户属性Class。

public string DisplayName { get; set; }

public int Id { get; set; }

public int NotesCount {get;set;}

PersonsDTO class

public string UserName { get; set; }

public int UserId { get; set; }

public int NotesCount { get ; set; }

public int BooksCount { get; set; }

人class

public UserProperties? UserDetails { get; set; }

public int NotesCount { get ; set; }

public int BooksCount { get; set; }

在映射配置文件中,

CreateMap<PersonsDTO, Persons>()
             .ForPath(o => o.UserDetails.DisplayName, b => b.MapFrom(z => z.UserName))
             .ForPath(o => o.UserDetails.Id, b => b.MapFrom(z => z.UserId))
             .ReverseMap();

在我的例子中,Persons class 中的 UserDetails 是可空类型。如果UserId中的PeronsDTO class是0的意思,我就不需要映射UserDetails了。对于 UserDetails 属性.

,它应该 returns 为 null

如何实现?

Automapper 版本:9.0.0

您可以指定一个自定义解析器来显式执行您的自定义映射。

    CreateMap<PersonDTO, Person>()
      .ForMember(dest => dest.UserDetails, opt => opt.MapFrom<CustomResolver>());

    public class CustomResolver : IValueResolver<PersonDTO, Person, UserProperties>
    {
        public UserProperties Resolve(PersonDTO source, Person destination, UserProperties member, ResolutionContext context)
        {
            if (source.UserId == 0)
                return null;
            return new UserProperties
            {
                DisplayName = source.UserName,
                Id = source.UserId
            };
        }
    }