5.9K Star 11.7K Fork 4K

GVPdotNET China / Furion

 / 详情

监控日志“返回结果”有循环引用造成序列化错误

已完成
创建于  
2022-08-23 19:33

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将直接关闭。

Furion 版本号

哪个版本号?
4.2.7

.NET SDK 版本号

  • .NET5
  • .NET6
  • .NET7

Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp

操作系统和版本

  • Windows(版本)
  • Linux(版本)
  • MacOS(版本)
  • 其他(版本)

代码环境

  • 开发环境(Development)
  • 生产环境(Production)
  • 测试环境(Tests/单元测试/集成测试 )

描述你的问题

监控日志记录返回值出现序列化错误
发生了什么?

┣ 最终类型:                  Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]
┣ 最终返回值:                "<Error Serialize>"

异常堆栈信息

异常堆栈是什么?


测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则不予处理。⚠⚠

您的代码下载地址?


数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

期待的结果是?

 /// <summary>
    /// 序列化对象
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    private static string SerializeObject(object obj)
    {
        var jsonSerializerOptions = new JsonSerializerOptions()
        {
            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        };

        try
        {
            return JsonSerializer.Serialize(obj, jsonSerializerOptions);
        }
        catch
        {
            return "<Error Serialize>";
        }
    }

JsonSerializerOptions建议增加以下代码:

ReferenceHandler = ReferenceHandler.IgnoreCycles

类似:Newtonsoft.JsonReferenceLoopHandling.Ignore
解决返回结果套娃的问题 IgnoreCycles 只有 .NET6 才支持,当然,如果能把序列化拿出来在注册的 options 里最好。用户自定义,可以用 Newtonsoft.Json,否则使用默认

评论 (4)

wuwh 创建了任务
wuwh 修改了描述
wuwh 修改了描述
wuwh 修改了描述
wuwh 修改了描述
展开全部操作日志

最好是直接使用自定义序列化提供器IJsonSerializerProvider

确实存在这个问题,暂时不考虑开放,原因是这个特性既可以做特性贴又可以全局配置,不想搞出一个 Options 或者 Builder,所以这个问题我默认内置处理即可。

另外返回值尽可能别返回循环引用的对象。

已修正:8cce647

下个版本发布。

百小僧 任务状态待办的 修改为已完成

v4.2.11 版本发布,已修正,感谢。


下次如果知道怎么解决问题可以贡献 Pull Request 哦。

百小僧 修改了描述

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助