升级到.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";
});

 

posted @ 2024-06-17 10:29  李大飞  阅读(241)  评论(0)    收藏  举报