json - 如何使用 Automapper 将 poco 映射到 JSON

标签 json mapping automapper

在我的 MVC 2 应用程序中,我有一个调用 Web 服务、构建 JSON 数据对象并将其返回到 View 的典型方法。

一切正常,但我想知道是否有一种方法可以使用 Automapper 进行映射,这样我就可以从我的 Controller 中删除丑陋的代码。提前致谢

这是我的操作方法

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);
    }

最佳答案

我使用 AutoMapper 的 ConstructUsing 方法解决了它。 这是我的 map

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 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);
    }

我觉得好多了

关于json - 如何使用 Automapper 将 poco 映射到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927624/

相关文章:

Hibernate,由父表中的序列生成的外键的映射

entity-framework - 在 AutoMapper 8.0 中缺少 ResolveUsing

c# - 为什么每次引用源集合时,Automapper 都会将一个具体集合映射到一个新实例?

python - Bottle 的 jsonify/pretty-print JSON

c# - .NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化

ruby - Mbox 中的数据转换为 JSON 或 CSV?

javascript - 使用 jQuery.grep() 引用 JSON 对象进行过滤

linux - 在运行时读取加载的共享对象的 ELF header

java - 在 Hibernate/JPA 映射中自动为列名添加特定于表的前缀?

c# - 具有依赖注入(inject)的 AutoMapper 不映射配置文件?