我在我的项目中使用Automapper将业务实体映射到DTO。
public class TransportStop
{
public Point[] Points { get; set; }
}
public class TransportStopDto
{
public PointDto[] Points { get; set; }
public TransportStopDto()
{
Points = new PointDto[0];
}
}
在构造函数中,我正在使用空数组初始化 Points 属性,以确保它始终不为 null。我正在使用基本配置进行映射。
Mapper.CreateMap<Point, PointDto>();
Mapper.CreateMap<TransportStop, TransportStopDto>();
TransportStop stop = new TransportStop()
{
Points = new Point[]
{
new Point() { X = 1, Y = 1 },
new Point() { X = 2, Y = 2 }
}
};
TransportStopDto dto = Mapper.Map<TransportStop, TransportStopDto>(stop);
使用Automapper 2.0.0,它工作得很好,但是升级到2.2.0版本后,我得到了内部异常的映射异常:
索引超出数组的范围
似乎自动映射器试图映射数组的每个成员,而不是覆盖整个数组。如果我从构造函数中删除属性初始化并将其保留为 null,则一切正常。
是否可以将自动映射器 2.2.0 配置为始终用新数组属性覆盖现有数组属性?
我通过降级到2.0.0版本解决了我的问题。