大概报错信息
一般是 两个实体 互相引用造成的死循环, (你中有我,我中有你,程序会一直递归下去)
设置 忽略引用, 即可解决
System.Text.Json.JsonException: A possible object cycle was detected. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 64. Consider using ReferenceHandler.Prese
rve on JsonSerializerOptions to support cycles.
SignalR
NuGet 搜索并下载
Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson
// 在Startup ConfigureServices 中设置
services.AddSignalR().AddNewtonsoftJsonProtocol(options =>
{
options.PayloadSerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
Asp.Net (api / mvc)
NuGet 搜索并下载
Microsoft.AspNetCore.Mvc.NewtonsoftJson
// 在Startup ConfigureServices 中设置
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
单独使用 Newtonsoft.Json 的时候
无需引用其他包, 直接设置即可
可以自己封装一个转string的方法, 每次调用传实体, 无需多次设置忽略
var model = new User(); // 用来举例的实体
var jsonSettings = new JsonSerializerSettings()
{
// 设置忽略
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
// 转string
var jsonData = JsonConvert.SerializeObject(model, jsonSettings);
_logger.LogInformation(jsonData);