源属性为空时

时间:2015-08-05 22:03:58

标签: c# automapper

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

4 个答案:

答案 0 :(得分:3)

以下是我所知道的一些方法:

ForAllMembers

所有属性上的所有空值都将替换为"N/A"。 如果任何属性无法映射到字符串,则会崩溃:

cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForAllMembers(opt => opt.NullSubstitute("N/A"));

ForMember

每个财产的替代品:

cfg.CreateMap<UniversalForm, UniversalFormDto>()
.ForMember(dto => dto.FirstName, opt => opt.NullSubstitute("N/A"))
...
;

ConvertUsing

通用替代任何属性中的所有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));

希望这有帮助。