C# 如何配置Automapper,使其在属性为null时忽略对象属性,而在属性不为null时忽略映射

C# 如何配置Automapper,使其在属性为null时忽略对象属性,而在属性不为null时忽略映射,c#,lambda,automapper,C#,Lambda,Automapper,我用的是Automapper。在这种情况下,我将DTO对象映射到另一个对象 UserProperties类 public string DisplayName { get; set; } public int Id { get; set; } public int NotesCount {get;set;} 班上的人 public string UserName { get; set; } public int UserId { get; set; } public int Notes

我用的是Automapper。在这种情况下,我将DTO对象映射到另一个对象

UserProperties类

public string DisplayName { get; set; }

public int Id { get; set; }

public int NotesCount {get;set;}
班上的人

public string UserName { get; set; }

public int UserId { get; set; }

public int NotesCount { get ; set; }

public int BooksCount { get; set; }
人员类别

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();
CreateMap()
.ForPath(o=>o.UserDetails.DisplayName,b=>b.MapFrom(z=>z.UserName))
.ForPath(o=>o.UserDetails.Id,b=>b.MapFrom(z=>z.UserId))
.ReverseMap();
在我的例子中,
Persons
类中的
UserDetails
是一个可空类型。如果
PeronsDTO
类中的
UserId
0
意味着,我不需要映射UserDetails。对于UserDetails属性,它应返回为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
            };
        }
    }
CreateMap()
.ForMember(dest=>dest.UserDetails,opt=>opt.MapFrom());
公共类CustomResolver:IValueResolver
{
公共UserProperties解析(PersonDTO源、Person目标、UserProperties成员、ResolutionContext上下文)
{
如果(source.UserId==0)
返回null;
返回新的用户属性
{
DisplayName=source.UserName,
Id=source.UserId
};
}
}

这方面有什么解决方案吗?你是在找这个:-或者这个:-或者这个:是的,通过添加这样的条件尝试了…但是它不起作用。如果我的两个建议都不起作用,你能告诉我你看到的行为吗?如果不满足条件,条件语句应阻止映射发生。上述条件语句应仅阻止内部属性(如UserDetails.DisplayName)的映射。我需要阻止UserDetails类本身的tha映射。我将答案改为使用自定义解析器。