AutoMapper在所有领域应用通用/全局格式化程序?

时间:2015-06-22 18:07:43

标签: .net automapper global formatter

我正在使用AutoMapper 3.2.1

我刚要求我的项目的消费者希望我做一些简单的转换 - 将所有字符串字段修剪为空格并将null转换为string.empty。

如何以有效的方式在AutoMapper中执行此操作?

e.g。

public class Person()
{
   public string First {get; set;}
   public string Middle {get; set; }
   public string Last {get; set; }
   public DateTime DateOfBirth {get; set; }
}

public class PersonDto()
{
   public string First {get; set;}
   public string Second {get; set; }
   public string Last {get; set; }
   public DateTime DateOfBirth {get; set; }
}

我的地图示例:

Mapper.CreateMap<Person, PersonDto>().
    .ForMember(dst => dst.Second, opt => opt.MapFrom(src => src.Middle));

Mapper.CreateMap<PersonDto, Person>().
    .ForMember(dst => dst.Last, opt => opt.MapFrom(src => src.Second));

我试着谷歌找到答案,看到有些人在使用:

Mapper.ForSourceType<string>().AddFormatter(MyCustomStringFormatter)

但似乎AddFormatter已经过时了?

2 个答案:

答案 0 :(得分:11)

如果您确实要将这些规则应用于所有字符串,则可以设置从stringstring的映射:

Mapper.CreateMap<string, string>()
    .ConvertUsing(str => (str ?? "").Trim());

从一个string属性映射到另一个属性时,将会选择此规则。

答案 1 :(得分:0)

在我的情况下,我环顾四周寻找可以修剪所有弦道具的解决方案。不适用于所有现有的地图定义,仅适用于某些特定的地图定义。 我的解决方案:

public class MyFragment extends Fragment {
 public void onStart() {
     MyFragmentViewModel userModel = ViewModelProviders.of(getActivity()).get(MyFragmentViewModel.class);
 }
}