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

.NET 6 API接口返回始终变为空数组问题求助

问题原因及解决方案

根本原因

你的API混合使用了Newtonsoft.Json(Json.NET)的JObject类型和**.NET 6默认的System.Text.Json序列化器**,两者的兼容性冲突导致响应内容被错误序列化为空数组。

.NET 6默认采用System.Text.Json处理JSON序列化,但JObject是Newtonsoft.Json的专属类型,System.Text.Json无法正确解析它,最终将原本的字符串值转化为了空数组[]。


解决方案

方案1:替换JObject为匿名类型或DTO类(推荐)

放弃使用JObject,改用.NET原生支持的匿名类型或自定义DTO类构建响应,确保序列化器能正确处理。

成功响应修改:

将创建JObject的代码替换为:

return Ok(new { message = "succes save" });

错误响应方法修改(respuestaDeError):

确保返回匿名类型而非JObject:

public IActionResult respuestaDeError(string mensaje, Exception ex = null)
{
    var errorMsg = ex != null ? $"{mensaje}: {ex.Message}" : mensaje;
    return new ObjectResult(new { error = errorMsg }) { StatusCode = 400 };
}

进阶:使用DTO类(更规范)

定义统一的响应DTO:

public class ApiResponse
{
    public string Message { get; set; }
    public string Error { get; set; }
}

在代码中使用:

// 成功时
return Ok(new ApiResponse { Message = "succes save" });

// 错误时
return new ObjectResult(new ApiResponse { Error = errorMsg }) { StatusCode = 400 };

方案2:配置API使用Newtonsoft.Json作为默认序列化器

如果必须保留JObject的使用,可以将API的默认序列化器切换为Newtonsoft.Json:

  1. 安装NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在Program.cs中添加配置:
builder.Services.AddControllers()
    .AddNewtonsoftJson(); // 启用Newtonsoft.Json序列化

这样API就能正确处理JObject类型的响应,返回预期的JSON格式。


内容的提问来源于stack exchange,提问作者Fercho Caxaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:15:42