ASP.NET Core Web API通过Swagger获取记录时数据缺失问题求助
解决方案
1. 替换默认序列化器为Newtonsoft.Json
你返回的是Newtonsoft.Json的JObject/IEnumerable<JObject>类型,但ASP.NET Core默认用System.Text.Json做序列化,两者不兼容才导致Swagger显示空值。按以下步骤配置:
- 先安装NuGet包:
Microsoft.AspNetCore.Mvc.NewtonsoftJson - 在Program.cs里修改控制器服务配置:
builder.Services.AddControllers() .AddNewtonsoftJson(); // 把默认序列化器换成Newtonsoft.Json
2. 让Swagger适配Newtonsoft.Json
如果上面的操作没解决问题,需要确保Swagger也用Newtonsoft.Json处理序列化:
- 安装NuGet包:
Swashbuckle.AspNetCore.Newtonsoft - 在Program.cs的Swagger配置里添加支持:
builder.Services.AddSwaggerGen(c => { // 你的其他Swagger配置代码... }) .AddNewtonsoftJsonSupport(); // 开启Swagger对Newtonsoft.Json的支持
3. 检查JObject的构造逻辑
虽然断点显示有数据,但要确认JObject的字段是正确赋值的,比如用JObject.FromObject()从实体类转换是最稳妥的方式:
// 示例:从Agency实体转换为JObject var agencyEntity = _dbContext.Agencies.First(); var jObject = JObject.FromObject(agencyEntity);
避免手动构造JObject时出现键值对未正确添加的情况。
4. 临时换实体类返回测试(可选)
可以临时把控制器方法的返回类型改成IEnumerable<Agency>,如果Swagger能正常显示数据,说明问题确实出在JObject和默认序列化器的兼容上。
内容的提问来源于stack exchange,提问作者ErickTreetops
相关产品推荐
相关产品推荐

