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

ASP.NET CORE WEB API调用存储过程返回JSON为空如何解决

解决方案

你的代码存在重复序列化的冗余逻辑,同时大概率是ASP.NET Core默认序列化器和Newtonsoft.Json的兼容问题导致响应为空,按以下步骤调整即可:

步骤1:确认项目配置了Newtonsoft.Json支持

ASP.NET Core 3.0+ 默认使用System.Text.Json作为序列化器,不会自动识别Newtonsoft.Json的JObject/JArray类型,需要先手动添加Newtonsoft.Json的支持:

  • 先安装NuGet包 Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • 在Program.cs(.NET 6+)或Startup.cs的服务注册代码中添加配置:
builder.Services.AddControllers()
    .AddNewtonsoftJson();

步骤2:优化接口代码,去掉冗余序列化逻辑

你原来的代码把DataTable转成JSON字符串又反序列化,属于重复操作,直接返回转好的JSON字符串或者直接返回DataTable都可以,推荐两种写法选一种即可:

写法1:直接返回序列化好的JSON字符串

[HttpGet]
public IActionResult GetTodoItem()
{
    try
    {
        DbConnect dbConnect = new DbConnect();
        DataSet ds = dbConnect.ExecuteSP2("View_Contacts");
        // 直接返回JSON字符串,指定content-type为application/json
        string jsonResult = dbConnect.DataTableToJSONWithJSONNet(ds.Tables[0]);
        return Content(jsonResult, "application/json");
    }
    catch (Exception ex)
    {
        return StatusCode(500, ex.Message);
    }
}

写法2:直接返回DataTable,交给序列化器处理

如果你的DataTableToJSONWithJSONNet方法没有特殊自定义逻辑,完全可以省略自己转JSON的步骤,让框架自动序列化:

[HttpGet]
public IActionResult GetTodoItem()
{
    try
    {
        DbConnect dbConnect = new DbConnect();
        DataSet ds = dbConnect.ExecuteSP2("View_Contacts");
        return Ok(ds.Tables[0]);
    }
    catch (Exception ex)
    {
        return StatusCode(500, ex.Message);
    }
}

这种写法需要在上面的AddNewtonsoftJson配置里加上DataTable序列化的支持,配置如下:

builder.Services.AddControllers()
    .AddNewtonsoftJson(opt =>
    {
        // 支持DataTable序列化
        opt.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.DataTableConverter());
        // 空值处理配置,和你预期的格式对齐
        opt.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
    });

排查验证建议

如果修改后还是返回空,先加断点确认两个点:

  • ds.Tables[0] 是否有数据,行数是否大于0
  • 调用DataTableToJSONWithJSONNet生成的results变量值是否和你预期的JSON样例一致

内容的提问来源于stack exchange,提问作者Joel Abraham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:57:02