我使用的是Automapper。在这种情况下,我将DTO对象映射到另一个对象。
UserProperties类。
public string DisplayName { get; set; }
public int Id { get; set; }
public int NotesCount {get;set;}PersonsDTO类
public string UserName { get; set; }
public int UserId { get; set; }
public int NotesCount { get ; set; }
public int BooksCount { get; set; }Person类
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类中的UserDetails是一个可以为空的类型。如果PeronsDTO类中的UserId是0 means,我不需要映射UserDetails。对于UserDetails属性,它应该作为null返回。
我怎样才能做到这一点?
Automapper版本: 9.0.0
发布于 2020-08-07 07:51:52
您可以指定一个自定义解析器来显式地执行自定义映射。
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
};
}
}https://stackoverflow.com/questions/63266425
复制相似问题