.NET Core 6 GET请求使用Newtonsoft.Json返回JSON空响应体问题
.NET 6.0 GET请求Newtonsoft.Json返回异常解决方案
问题表现
.NET 6.0 C#项目开发GET接口,引入Newtonsoft.Json处理JSON序列化时,两种常规返回写法均不符合预期:
- 直接向
Results.Json传入JObject实例,接口返回空响应体 - 向
Results.Json传入JObject序列化生成的字符串,返回内容的换行位置会被自动添加\r\n转义字符,格式错误
根因分析
- .NET 6 内置的
Results.Json方法默认序列化器为System.Text.Json,该序列化器无法正确识别处理Newtonsoft.Json的JObject类型,序列化后无内容输出。 - 传入已完成序列化的JSON字符串调用
Results.Json时,内置序列化器会将输入值识别为普通字符串做二次转义,原有JSON结构的引号、换行符都会被加上转义前缀,无法作为标准JSON响应被前端解析。
正确实现
using NetMQ; using NetMQ.Sockets; using Newtonsoft.Json.Linq; using System.Text; static JObject j_tmp = new JObject(); private static async Task<IResult> Command1() { j_tmp["test"] = "1234"; j_tmp["number"] = 18; // 直接输出序列化完成的JSON内容,指定正确的响应Content-Type return Results.Content(j_tmp.ToString(Newtonsoft.Json.Formatting.None), "application/json; charset=utf-8"); }
方案说明
Results.Content方法会直接将传入的字符串写入响应流,不会触发内置序列化逻辑。传入Formatting.None生成无缩进、无多余换行的紧凑JSON字符串,同时手动指定application/json的响应类型和UTF-8编码,即可返回符合预期的JSON结果。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

