我正在使用ASP.NET MVC 3
和AutoMapper
。
在我的类别控制器中,我返回一个类别列表,我想将每个类别映射到我的网格中使用的类别视图模型。我有自己的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);
//}
}
我想添加另一种可以映射列表的方法。我该怎么做?
答案 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方法。