Automapper自定义类型转换器,具有基于字符串的自定义类型

时间:2011-12-12 18:04:47

标签: c# automapper

我正在开发一个相当大的Asp.net MVC3项目,并希望使用Automapper来解决以下问题。

在数据库中,电话号码存储为10位十进制数字。在用户屏幕上,显示&编辑为“(xxx)yyy-zzzz”。

我想要做的是创建一个如下所示的自定义类型转换器 -

public class phoneNumber  //display data type
                inherits string;

public class getdata(){
       Mapper.CreateMap<decimal, phoneNumber>().ConvertUsing(decimal2Phone);
       Mapper.CreateMap<phoneNumber, decimal>().ConvertUsing(phone2Decimal);

       Mapper.CreateMap<dbRecordTYpe, displayRecordType>();
       Mapper.CreateMap<displayRecordType, dbRecordTYpe>();
}

https://github.com/AutoMapper/AutoMapper/wiki/Custom-type-converters上的使用情况。我们使用Automapper将所有数据从数据库实体模型移动到显示视图模型。

我知道我不能从字符串继承。

但是,如果我可以使用Automapper进行这种格式转换,它将为我节省大量工作和重复代码。

1 个答案:

答案 0 :(得分:0)

您可以使用合成而不是继承 - 只需在自定义PhoneNumber类中使用字符串属性,并在映射中使用该属性:

class PhoneNumber
{
  public string Number {get;set;}
}

...
Mapper.CreateMap<decimal, PhoneNumber>().ConvertUsing( num =>
{
   //do custom conversion of decimal to string here, ToString() just example
   string s = num.ToString();
   return new PhoneNumber() { Number =  s };
});