You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:10