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

.NET 6 API用JObject接收任意合法JSON报错,如何解决?

问题分析与解决方案

报错原因

你的问题出在.NET 6默认使用System.Text.Json作为JSON序列化器,而JObject是Newtonsoft.Json(Json.NET)的专属类型,两者序列化体系不兼容,导致模型绑定失败,返回400验证错误。

替代方案(按实现复杂度排序)

方案1:直接读取请求体字符串(最适合你的需求)

既然你只需要将JSON转为字符串记录日志,完全不需要解析JSON结构,直接读取原始请求体是最简单的方式:

public async Task<IActionResult> LogSomeJSONendpoint()
{
    using var reader = new StreamReader(Request.Body);
    var payload = await reader.ReadToEndAsync();
    Log.Information(payload);
    return Ok();
}

方案2:使用System.Text.Json的JsonElement类型

如果需要偶尔解析JSON结构,同时保持默认序列化体系,用JsonElement替代JObject:

public async Task<IActionResult> LogSomeJSONendpoint([FromBody] JsonElement payload)
{
    var jsonString = payload.GetRawText();
    Log.Information(jsonString);
    return Ok();
}

JsonElement是System.Text.Json中用于表示任意JSON元素的类型,支持所有合法JSON格式,能直接转为原始JSON字符串。

方案3:切换项目使用Newtonsoft.Json(兼容JObject)

如果你坚持要用JObject,需要将项目的JSON序列化器切换为Newtonsoft.Json:

  1. 安装NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在Program.cs中配置:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
    .AddNewtonsoftJson(); // 添加这一行

配置完成后,你的原始代码就能正常接收任意合法JSON了。

关于JObject的疑问

JObject本身确实可以接收任意合法JSON,但必须确保项目使用Newtonsoft.Json作为JSON序列化器。.NET 6及以后版本默认用System.Text.Json,和Newtonsoft.Json的类型不互通,这是你之前报错的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:25:33