如何将 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
};
}
}
我正在使用 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 属性.
如何实现?
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
};
}
}