源属性为null时所有字符串属性的默认值

Rud*_*ron 3 c# automapper

是否可以使用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时要使用的所有字符串属性的默认值。

Ask*_* B. 6

我知道一些方法:

ForAll会员

所有属性上的所有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)


Bri*_*ian 1

您可以在构造函数中设置所需的默认属性:

public UniversalFormDto() 
{
    FaxNumber = "N/A";
    MiddleName = "N/A";
    //etc...
}
Run Code Online (Sandbox Code Playgroud)