升级到.Net 8 api 返回JObject 对象为空字符串
在使用dotnet 8 过程中,使用了JObject类型作为api的返回,但是返回的空数组
api:
[HttpGet("voices")]
public async Task<IActionResult> GetObject()
{
JObject obj = new JObject();
obj["test"] = "test";
return new JsonResult(obj) { StatusCode = 200,ContentType= "application/json" };
}
期待返回:
{
"test": "test"
}
真实返回:
{
"test": []
}
查询资料得知:
.Net 8 默认为system.text.json支持
导致返回的数据格式都是基于system.text.json格式化返回。
了解到有两种解决方法:
1.移除JObject改用System.Text.Json.Nodes.JsonObject
2.改用Microsoft.AspNetCore.Mvc.NewtonsoftJson
以下是第二种方法:
需要启用Newtonsoft.Json。
引用类库:Microsoft.AspNetCore.Mvc.NewtonsoftJson (记得要用Mircrisoft开头的库,之前的不支持net8 AddNewtonsoftJson)
在启动文件添加NuGet 包并在 Program.cs 中进行配置
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
.AddNewtonsoftJson();
在上述代码中,对 AddNewtonsoftJson 的调用会将以下 Web API、MVC 和 Razor Pages 功能配置为使用 Newtonsoft.Json;
需要对日期格式进行设置:
builder.Services.AddControllers().AddNewtonsoftJson(option =>
{
option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});

浙公网安备 33010602011771号