AutoMapper:Int到String并返回
编辑:包括TypeConverter
为了设置阶段,我从现有的WCF服务中剥离代码,放入一个业务对象(BO)中,该对象将被WCF引用以向客户端提供信息。 要求是将Employee对象的employeeId设置为一个整数而不是当前使用的字符串。 我使用AutoMapper来映射BO和WCF之间的所有对象,以便合约不会中断。 然而,我正在努力如何为EmployeeId来回映射为BO中的整数,并仍然通过WCF以合约方式提供字符串。
BO
public class Employee
{
public int Id {get; set;}
......
}
WCF
[DataContract(Name = "Employee", Namespace="url")]
public class Employee
{
[DataMember(Order = 1)]
public string Id {get; set;}
......
}
映射器
Mapper.CreateMap<Employee.Entity.Employee, Employee.Service.Entity.Employee>()
PaddedStringTypeConverter类:
public class PaddedStringTypeConverter : ITypeConverter<int, string>
{
public string Convert(ResolutionContext context)
{
var sourceValue = System.Convert.ToInt32(context.SourceValue);
return sourceValue.ToString("D9");
}
}
我已经看到,我可以在AutoMapper中使用自定义类型转换器将BO从一个整数更改为我们固定长度的九个字符,因此4610的整数值将相当于一串“000004610”。 但是,如何将其恢复为整数值。
你会如何做到这一点?
自动映射器非常适合自动映射/来自同名的东西。 如果要更改转换,或者要映射的东西名称不同,则需要使用.ForMember()。 你的地图会是这样的:
Mapper.CreateMap<Employee.Entity.Employee, Employee.Service.Entity.Employee>()
.ForMember(dest => dest.EmployeeID, expression => expression.MapFrom(src => Convert.ToInt32(src.EmployeeID)))
;
然后添加反向自定义映射。
你不应该需要你PaddedStringTypeConverter类。
为两个方向创建两个映射:
Mapper.CreateMap<Employee.Entity.Employee, Employee.Service.Entity.Employee>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id.ToString("D9")))
.ReverseMap()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => int.Parse(src)));
这会在两个方向上创建地图,而选项会来回转换该成员的类型。
ReverseMap是切换源/目标类型的CreateMap的快捷方式。
链接地址: http://www.djcxy.com/p/37403.html