如何在ASP.NET Core 8项目中返回JSON结果?
在ASP.NET Core 8中返回JSON结果的正确方式
问题原因
你之前在ASP.NET MVC中使用的Json(dt, JsonRequestBehavior.AllowGet)写法在ASP.NET Core 8中已不再适用,核心原因是:
- ASP.NET Core默认允许GET请求返回JSON,无需指定
JsonRequestBehavior.AllowGet Controller.Json()方法的实现逻辑已调整,直接使用会导致类型匹配错误
以下是几种基于标准.NET Core 8库的正确实现方式:
方式1:直接返回实体对象(推荐)
ASP.NET Core会自动将返回的CLR对象序列化为JSON,这是最简洁、符合框架设计理念的写法:
[HttpGet] public InvoiceData GetData() { InvoiceData dt = new InvoiceData(); // 这里填充InvoiceData的业务数据 return dt; }
框架会根据请求的Accept头自动处理序列化,默认返回JSON格式。
方式2:显式返回JsonResult
如果需要明确指定返回JSON(比如忽略请求的Accept头),可以直接实例化JsonResult:
[HttpGet] public JsonResult GetData() { InvoiceData dt = new InvoiceData(); // 填充数据 return new JsonResult(dt); }
若需自定义序列化规则(比如驼峰命名、缩进格式化),可传入JsonSerializerOptions:
[HttpGet] public JsonResult GetData() { InvoiceData dt = new InvoiceData(); var serializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; return new JsonResult(dt, serializerOptions); }
方式3:使用IActionResult处理多场景返回
如果方法需要根据业务逻辑返回不同类型的结果(比如正常JSON、错误信息),可以用IActionResult作为返回类型:
[HttpGet] public IActionResult GetData() { try { InvoiceData dt = new InvoiceData(); // 填充数据 return Ok(dt); // Ok()会自动将对象序列化为JSON } catch (Exception ex) { return BadRequest(new { ErrorMessage = ex.Message }); } }
这里的Ok()和BadRequest()都是ASP.NET Core提供的结果方法,会自动处理JSON序列化。
内容的提问来源于stack exchange,提问作者Alex161
相关产品推荐
相关产品推荐

