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

引用类库中的类时无法接收POST请求数据

.NET Core最小Web API引用类库模型时,FromBody反序列化嵌套对象无响应问题

问题诊断

核心原因是类库依赖Newtonsoft.Json,但Web API默认使用System.Text.Json处理请求体反序列化,两者的序列化行为/配置存在隐性冲突,导致嵌套对象反序列化过程中出现无征兆阻塞:

  • 发送{"id":"some value"}能正常返回,是因为该JSON无法匹配SomeClass结构,System.Text.Json直接创建空实例(无必填校验),端点逻辑正常执行
  • 发送包含subClassObject的JSON时,反序列化因序列化器冲突卡住,请求看似返回200,但实际未执行到返回逻辑

解决方案

方案1:统一Web API使用Newtonsoft.Json序列化

既然类库已依赖Newtonsoft.Json,直接让Web API同步使用该序列化器:

  1. 安装NuGet包:
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
  1. 在Program.cs中配置:
var builder = WebApplication.CreateBuilder(args);

// 添加Newtonsoft.Json支持
builder.Services.AddControllers().AddNewtonsoftJson();

var app = builder.Build();

// 其他中间件配置...

app.MapPost("/endpoint", ([FromBody] SomeClass someClassObject) => 
{
    // do stuff with someClassObject
    return "OK";
});

app.Run();

方案2:调整类库模型兼容System.Text.Json

若不想切换序列化器,修改类库模型以适配System.Text.Json规则:

using System.Text.Json.Serialization;

namespace SomeClassLibrary.Some.Arbitrary.Namespace 
{
  public class SomeClass 
  {
    public SomeClass() {}
    [JsonPropertyName("subClassObject")]
    public SomeSubClass? subClassObject {get; set;}
  }
  public class SomeSubClass 
  {
    public SomeSubClass() {}
    [JsonPropertyName("id")]
    public string? id {get; set;}
  }
}

修改后清理并重建整个解决方案,确保Web API加载更新后的类库。

方案3:排查依赖版本冲突

检查解决方案内Newtonsoft.Json的版本一致性:

  • 右键解决方案 → 管理NuGet程序包,确认所有项目的Newtonsoft.Json版本统一
  • 若存在版本差异,调整为同一版本,避免类型加载异常

验证步骤

  1. 应用方案后重启Web API
  2. 用Postman发送嵌套结构的JSON请求,确认返回"OK"响应体
  3. 可在端点添加日志验证反序列化结果:
app.MapPost("/endpoint", ([FromBody] SomeClass someClassObject) => 
{
    Console.WriteLine($"Received ID: {someClassObject?.subClassObject?.id}");
    return "OK";
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:35:19