当前位置: 首页 > 面试题库 >

从MVC控制器返回带有对象列表的JsonResult

龙德义
2023-03-14
问题内容

我的MVC控制器中有一个简单的方法

[HttpPost]
public JsonResult GetAreasForCompany(int companyId)
{
   var areas = context.Areas.Where(x => x.Company.CompanyId == companyId).ToList();
   return Json(areas);
}

这是一个区域对象:

public class Area
{
    public int AreaId { get; set; }

    [Required]
    public string Title { get; set; }
    public bool Archive { get; set; }

    public virtual Company Company { get; set; }
}

这就是我从视图中调用方法的方式:

$.ajax({
    url: '@Url.Action("GetAreasForCompany")',
    type: 'POST',
    async: false,
    data: "{'companyId': " + companyId + "}",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    error: function () {
        alert("Server access failure!");
    },
    success: function (result) {
        response = result;
    }
});

我已经检查了控制器中的方法,并创建了Area对象的列表。您有什么主意,为什么从视图中调用该方法时为什么会出现500内部服务器错误?当我返回其他任何内容(例如Dictionary对象)时,一切正常,只是当我打算将Areas列表转换为Json时,我得到一个错误。


问题答案:

由于类Area包含CompanyCompany包含的集合,因此Area您的对象层次结构中可能具有循环引用,而JSON序列化器不支持循环引用。要解决此问题,请仅返回具有所需属性的匿名对象,例如

[HttpPost]
public JsonResult GetAreasForCompany(int companyId)
{
  var areas = context.Areas
    .Where(x => x.Company.CompanyId == companyId)
    .Select(a => new
    {
      AreaId = a.AreaId,
      Title = a.Title
    });
  return Json(areas);
}


 类似资料:
  • 我试图从xml配置转移到java配置。应用程序启动时不会出现任何错误,但是当内容不同时,jsp返回$END$。 我相信我在某个地方犯了一些愚蠢的错误,没有抛出异常 注意:使用xml配置时,一切正常 配置类 初始值设定项类 控制器

  • 问题内容: 我正在做一个MVC应用程序,我需要从控制器传递json对象才能查看。 上面的代码是我在控制器中使用的,现在当我部署视图页面时,在浏览器中打开一个下载对话框,打开文件时,它会为我提供json对象作为我需要的格式。 现在我想返回我的视图页面,也想访问视图页面中的json对象。我怎样才能做到这一点。 问题答案: 在执行此操作时,您明确地告诉MVC 不要使用view 并提供序列化的JSON数据

  • 我得到这个错误消息: 无法写入JSON: 未找到用于java.io.FileDescriptor类的序列化程序,也未发现用于创建BeanSerializer的属性 (为了避免异常,禁用SerializationFeature.fail_on_empty_beans)) (通过引用链: org.springframework.core.io.filesystemResource[\“outputSt

  • 问题内容: 我必须从控制器返回员工列表以响应jQuery AJAX请求。我应该怎么做? 我的控制器: 相关视图中的AJAX代码: 提前致谢。 问题答案: 在spring,当你需要对象序列化,反序列化和消息转换时。在这种情况下,你需要使用和注释控制器处理程序方法。 哪里: @ResponseBody:将通知spring尝试转换其返回值并将其自动写入http响应。 @RequestBody:将通知sp

  • 我不能将完整的对象序列化到Java API Rest中。响应方法中没有返回某些属性。 我有一个这样的对象: 这是我在RestController中的方法的一个示例: 这是我的回报,没有这个人的财产: 我无法得到完整的物体

  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t