学海无涯

导航

统计

序列化成Json时,多个对象互相引用导致死循环 Text.Json.JsonException: A possible object cycle was detected.

错误: 当两个类中的属性互相引用时,导致对象实例序列化成Json时死循环,错误如下:

1
System.Text.Json.JsonException: A possible object cycle was detected. <br>This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32. <br>Consider using ReferenceHandler.Preserve on JsonSerializerOptions to support cycles. <br>Path: $.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Delivery.Order.Id.

 解决方法:

在 Program.cs中添加 AddJsonOptions 选项配置,此配置Json不但不会死循环而且还能完整表达实例之间的互相引用关系。

1
2
builder.Services.AddControllers()
    .AddJsonOptions(option => option.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.Preserve);

增加AddJsonOptions 后的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "$id": "1",
  "id": 1,
  "companyName": "蜗牛快递",
  "number": "SN356565565",
  "order": {
    "$id": "2",
    "id": 1,
    "name": "USB 充电器",
    "address": "湖南省长沙市岳阳临湘大市场",
    "delivery": {
      "$ref": "1"
    }
  },
  "orderId": 1
}

  

posted on   宁静致远.  阅读(812)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示