使用AutoMapper在Mapper类中映射列表

时间:2011-09-29 09:37:32

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

我正在使用ASP.NET MVC 3AutoMapper

在我的类别控制器中,我返回一个类别列表,我想将每个类别映射到我的网格中使用的类别视图模型。我有自己的mapper类方法,它接受源,源类型和目标类型,然后执行单个对象的映射。我如何添加和其他方法,以便我可以映射列表?

例如,如果我想将单个类别映射到我的类别编辑视图模型,那么将使用以下映射:

Mapper.CreateMap<CategoryCreateViewModel, Category>();

在我的控制器中,我会像这样映射2:

Category category = (Category)categoryMapper.Map(viewModel, typeof(CategoryCreateViewModel), typeof(Category));

这就是我的映射方法:

public class CategoryMapper : ICategoryMapper
{
     static CategoryMapper()
     {
          Mapper.CreateMap<Category, CategoryCreateViewModel>();
          Mapper.CreateMap<Category, CategoryViewModel>();
          Mapper.CreateMap<CategoryCreateViewModel, Category>();
     }

     public object Map(object source, Type sourceType, Type destinationType)
     {
          return Mapper.Map(source, sourceType, destinationType);
     }

     // I have been trying to get this right but not working
     //public object Map(object source, IEnumerable<Type> sourceType, IEnumerable<Type> destinationType)
     //{
     //     return Mapper.Map(sourceType, destinationType);
     //}
}

我想添加另一种可以映射列表的方法。我该怎么做?

3 个答案:

答案 0 :(得分:2)

AutoMapper知道如何映射列表,您不需要任何额外的代码。

只要您提供单个对象的映射,它就会起作用。

E.g:

Mapper.CreateMap<Source,Dest>();

然后:

var mappedCollection = Mapper.Map<IEnumerable<Source>,IEnumerable<Dest>>(items);

它会起作用。

答案 1 :(得分:0)

var maplist= Mapper.Map<IEnumerable<TSource>, IEnumerable<TDestination>>(IEnumerable<TSource>source);

我不确定但尝试类似

var category = CategoryMapper.Map(viewModel, CategoryCreateViewModel, Category);

public object Map(object source, IEnumerable<T> sourceType, IEnumerable<T> destinationType)
     {
         return Mapper.Map<sourceType,destinationType>(source);
     }

答案 2 :(得分:0)

我想使用我上面提到的IMapper方法。在Darin Dimitrov的帮助下,我得到了这个。这是我的控制器代码:

public ActionResult JsonGetParentCategoryList()
{
     IEnumerable<Category> categoryList = categoryService.GetAll();

     // Mapping
     IEnumerable<CategoryViewModel> viewModelList = (IEnumerable<CategoryViewModel>)
          categoryMapper.Map(
               categoryList,
               typeof(IEnumerable<Category>),
               typeof(IEnumerable<CategoryViewModel>)
     );

     JsonEncapsulatorDto<CategoryViewModel> data = new JsonEncapsulatorDto<CategoryViewModel>
     {
          DataResultSet = viewModelList
     };

     return Json(data, JsonRequestBehavior.AllowGet);
}

它适用于我目前的IMapper Map方法。