是否可以使用AutoMapper将源对象中的所有字符串属性设置为目标对象中的某个默认值?
例如,假设我有以下两个类定义:
public class UniversalForm
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string FaxNumber { get; set; }
...
}
public class UniversalFormDto
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string FaxNumber { get; set; }
...
}
现在,MiddleName和FaxNumber是UniversalForm类中可能为null的属性。所以我希望能够做的是,如果FaxNumber或MiddleName为null,那么在UniversalFormDto对象中,我希望将相应属性的值设置为“N / A”。
我知道这可以通过为每个成员创建映射来实现,但我想尽可能避免这种情况。
我正在寻找一种方法来为我的源对象(UniversalForm)上的相应属性为null时使用的所有字符串属性定义默认值。
答案 0 :(得分:3)
以下是我所知道的一些方法:
所有属性上的所有空值都将替换为"N/A"
。
如果任何属性无法映射到字符串,则会崩溃:
cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForAllMembers(opt => opt.NullSubstitute("N/A"));
每个财产的替代品:
cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForMember(dto => dto.FirstName, opt => opt.NullSubstitute("N/A"))
...
;
通用替代任何属性中的所有null
字符串:
cfg.CreateMap<string, string>().ConvertUsing(s => s ?? "N/A");
答案 1 :(得分:2)
不确定在发布问题时这些是否存在,但我建议使用这样的 Value Transformer:
var configuration = new MapperConfiguration(cfg => {
cfg.ValueTransformers.Add<string>(val => val ?? "N/A");
});
或者如果使用配置文件:
public class MyProfile : Profile
{
public MyProfile()
{
ValueTransformers.Add<string>(val => val ?? "N/A");
}
}
答案 2 :(得分:0)
您可以在构造函数中设置所需的默认属性:
import org.springframework.security.web.authentication.switchuser.SwitchUserFilter
beans = {
switchUserFilter {
usernameParameter = 'email'
}
}
答案 3 :(得分:0)
我对AutoMapper不太熟悉,但在做了一些研究之后,你可能想尝试每个属性的条件映射。
Mapper.CreateMap<Source, Target>()
.ForMember(dest => dest.MiddleName,
opt => opt.MapFrom
(src => String.IsNullOrEmpty(src.MiddleName)
? "N/A"
: src.MiddleName));
希望这有帮助。