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

上一篇: AutoMapper: Int to String and back again

下一篇: Automapper and Deep Loading