如何使用Automapper将poco映射到JSON
在我的MVC2应用程序中,我有一个典型的方法调用web服务,构建JSON数据对象并将其返回到视图 一切正常,但我想知道是否有一种方法可以使用Automapper进行映射,这样我就可以从我的控制器中删除丑陋的代码。提前谢谢 这是我的行动方法如何使用Automapper将poco映射到JSON,json,mapping,automapper,Json,Mapping,Automapper,在我的MVC2应用程序中,我有一个典型的方法调用web服务,构建JSON数据对象并将其返回到视图 一切正常,但我想知道是否有一种方法可以使用Automapper进行映射,这样我就可以从我的控制器中删除丑陋的代码。提前谢谢 这是我的行动方法 public virtual ActionResult AllErrors(string sidx, string sord, int page=1, int rows=10)
public virtual ActionResult AllErrors(string sidx, string sord,
int page=1, int rows=10)
{
var pageSize = rows;
var pageNumber = page;
var orderBy = string.Format("{0} {1}", sidx, sord);
var result = errorService.GetPagedOpenErrors(pageSize, page, orderBy);
var errors = new List<IngestionErrorDataContract>(result.IngestionErrors);
var totalPages = (int) Math.Ceiling(result.TotalRows/(float) pageSize);
int index = 0;
var list = new List<object>();
errors.ForEach(e => list.Add(
new {
i = index++,
cell = new[]
{
e.IngestionErrorId.ToString(),
e.RunId.ToString(),
e.ProcessDate.ToShortDateString(),
e.Status,
e.ErrorDetails
}
}));
var jsonData = new
{
total = totalPages,
page = pageNumber,
records = result.TotalRows,
rows = list.ToArray()
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
公共虚拟操作结果所有错误(字符串sidx、字符串sord、,
整数页=1,整数行=10)
{
var pageSize=行;
var pageNumber=第页;
var orderBy=string.Format(“{0}{1}”,sidx,sord);
var result=errorService.GetPagedOpenErrors(页面大小、页面、排序依据);
var errors=新列表(result.IngestionErrors);
var totalPages=(int)Math.天花(result.TotalRows/(float)pageSize);
int指数=0;
var list=新列表();
errors.ForEach(e=>list.Add(
新的{
i=索引+++,
单元格=新[]
{
e、 InjectionErrorId.ToString(),
e、 RunId.ToString(),
e、 ProcessDate.ToShortDateString(),
e、 地位,
e、 错误详细信息
}
}));
var jsonData=new
{
总计=总页数,
页码=页码,
记录=result.TotalRows,
rows=list.ToArray()
};
返回Json(jsonData、JsonRequestBehavior.AllowGet);
}
我用AutoMapper的ConstructUsing方法解决了这个问题。
这是我的地图
public void CreateMap()
{
Mapper.CreateMap<List<IngestionErrorDataContract>, object[]>()
.ConvertUsing(
errors =>
{
int index = 0;
var list = new List<object>();
errors.ForEach(e => list.Add(
new
{
i = index++,
cell = new[]
{
e.IngestionErrorId.ToString(),
e.RunId.ToString(),
e.ProcessDate.ToShortDateString(),
e.Status,
e.ErrorDetails
}
}));
return list.ToArray();
});
}
public void CreateMap()
{
Mapper.CreateMap()
.转炉(
错误=>
{
int指数=0;
var list=新列表();
errors.ForEach(e=>list.Add(
新的
{
i=索引+++,
单元格=新[]
{
e、 InjectionErrorId.ToString(),
e、 RunId.ToString(),
e、 ProcessDate.ToShortDateString(),
e、 地位,
e、 错误详细信息
}
}));
return list.ToArray();
});
}
这是我现在的行动方法
public virtual ActionResult AllErrors(string sidx, string sord, int page=1, int rows=10)
{
var pageSize = rows;
var pageNumber = page;
var orderBy = string.Format("{0} {1}", sidx, sord);
var result = errorService.GetPagedOpenErrors(pageSize, page, orderBy);
var errors = new List<IngestionErrorDataContract>(result.IngestionErrors);
var totalPages = (int) Math.Ceiling(result.TotalRows/(float) pageSize);
var jsonData = new
{
total = totalPages,
page = pageNumber,
records = result.TotalRows,
rows = mapper.Map<List<IngestionErrorDataContract>,object[]>(errors)
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
public虚拟操作结果所有错误(字符串sidx,字符串sord,int page=1,int rows=10)
{
var pageSize=行;
var pageNumber=第页;
var orderBy=string.Format(“{0}{1}”,sidx,sord);
var result=errorService.GetPagedOpenErrors(页面大小、页面、排序依据);
var errors=新列表(result.IngestionErrors);
var totalPages=(int)Math.天花(result.TotalRows/(float)pageSize);
var jsonData=new
{
总计=总页数,
页码=页码,
记录=result.TotalRows,
rows=mapper.Map(错误)
};
返回Json(jsonData、JsonRequestBehavior.AllowGet);
}
我认为最好将映射代码提取到一个单独的类中,这样就可以得到一些通用的代码