问题自动映射=>视图模型的集合而不是另一个视图模型

时间:2011-04-17 03:36:47

标签: asp.net-mvc asp.net-mvc-3 automapper

我有类似的东西

public class AViewModel
{
    public decimal number { get; set; }
    public List<BViewModel> BVM { get; set; }
}

public class BViewModel
{
    public string someString{ get; set; }
}

public class SomeObject
{
    public decimal number { get; set; }
    public List<OtherObjects> BVM { get; set; }
}

public class OtherObjects {
    public string someString{ get; set; }
}

Mapper.CreateMap<SomeObject,AViewModel>();

当我有这个时,我得到了

  • 尝试将OtherObjects映射到BViewModel
  • 使用SomeObject的映射配置到AViewModel
  • 目标属性:BVM
  • 缺少类型映射配置或不支持的映射。
  • 抛出了“AutoMapper.AutoMapperMappingException”类型的异常。

如何帮助它弄清楚如何正确映射?

2 个答案:

答案 0 :(得分:5)

我相信Automapper需要知道如何将OtherObject转换为BViewModel。尝试为此添加映射。

答案 1 :(得分:0)

您需要通过指定custom type converter

在OtherObject和BViewModel之间指定一个typeconverter

这是转换器的样子:

public class OtherToBViewTypeConverter : ITypeConverter<OtherObjects, BViewModel>
{
  public BViewModel Convert(ResolutionContext context) 
  {
    if (context.IsSourceValueNull) return null;

    var otherObjects = context.SourceValue as OtherObjects;

    return new BViewModel { someString = otherObjects.someString; }
  }
}

然后地图就像这样调用:

Mapper.CreateMap<SomeObject,AViewModel>().ConvertUsing<OtherToBViewTypeConverter>();