是否可以使用AutoMapper将源对象中所有为null的字符串属性设置为目标对象中的某些默认值?
例如,假设我有以下两个类定义:
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; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在,MiddleName和FaxNumber是在UniversalForm类中可能为空的属性。因此,我想做的是如果FaxNumber或MiddleName为null,那么在UniversalFormDto对象中,我希望将相应属性的值设置为“ N / A”。
我知道可以通过为每个成员创建一个映射来实现,但是我想尽可能避免这种情况。
我正在寻找一种方法来定义当我的源对象(UniversalForm)上的相应属性为null时要使用的所有字符串属性的默认值。
我知道一些方法:
所有属性上的所有null值都将替换为"N/A"。如果任何属性无法映射到字符串,将崩溃:
cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForAllMembers(opt => opt.NullSubstitute("N/A"));
Run Code Online (Sandbox Code Playgroud)
每个财产的替代品:
cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForMember(dto => dto.FirstName, opt => opt.NullSubstitute("N/A"))
...
;
Run Code Online (Sandbox Code Playgroud)
通用替换null任何属性中的所有字符串:
cfg.CreateMap<string, string>().ConvertUsing(s => s ?? "N/A");
Run Code Online (Sandbox Code Playgroud)
您可以在构造函数中设置所需的默认属性:
public UniversalFormDto()
{
FaxNumber = "N/A";
MiddleName = "N/A";
//etc...
}
Run Code Online (Sandbox Code Playgroud)