找回密码
 立即注册

QQ登录

只需一步,快速开始

jyjc 讲师达人认证
高级会员   /  发表于:2022-1-5 20:10  /   查看:2183  /  回复:7
1金币
本帖最后由 jyjc 于 2022-1-6 15:25 编辑

前后端均使用葡萄城 组件处理excel,前端生成ssjson后传输到后端,后端使用 GrapeCity.Documents.Excel.ToJson函数时,触发了 json序列化死循环(提示  ActiveCell对象循环引用),进而导致系统崩溃。
详情见附件:
初步排查为 ssjson中  
rowDataArray 的Style对象导致的。 ssjson见附件

前端引起异常的代码:
  1. "data": {
  2.                                 "rowDataArray": [
  3.                                        
  4.                                        
  5.                                         {
  6.                                                 "style": {
  7.                                                         "backColor": null,
  8.                                                         "foreColor": "#000000",
  9.                                                         "hAlign": 3,
  10.                                                         "vAlign": 1,
  11.                                                         "font": "normal normal 11pt 微软雅黑,sans-serif",
  12.                                                         "formatter": "General",
  13.                                                         "borderLeft": {},
  14.                                                         "borderTop": {},
  15.                                                         "borderRight": {},
  16.                                                         "borderBottom": {},
  17.                                                         "locked": true,
  18.                                                         "textIndent": 0,
  19.                                                         "wordWrap": false,
  20.                                                         "shrinkToFit": false,
  21.                                                         "imeMode": 1,
  22.                                                         "cellPadding": "0 10 0 10",
  23.                                                         "quotePrefix": false
  24.                                                 }
  25.                                         }
  26.                                 ],
复制代码


后端代码:
  1. var workbook = new Workbook();
  2. var jsonErrors = workbook.FromJson(ssJsonData);
  3. if (jsonErrors != null && jsonErrors.Count > 0)
  4.             {
  5.                 throw new BusinessLogicException("json文件出错");
  6.             }
复制代码







ssjson.zip

6.53 KB, 下载次数: 117

ssjson

最佳答案

查看完整内容

嗯,老版本确实可以重现,这个应该是在新版本中已经修复了,建议升级到新版本即可,升级到4.2.6就行

7 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-5 20:10:39
来自 6#
嗯,老版本确实可以重现,这个应该是在新版本中已经修复了,建议升级到新版本即可,升级到4.2.6就行
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-6 10:59:07
2#
您好,目前在4.6.2,以及5.0以上的版本中均未发现问题,如果你这边是老版本,建议你可以先升级版本测试一下

测试代码如下,加载未报错
  1.             string jsonstr = File.ReadAllText(jsonfilename);
  2.             workbook.FromJson(jsonstr);
复制代码
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2022-1-6 15:19:23
3#
本帖最后由 jyjc 于 2022-1-6 15:25 编辑
Richard.Ma 发表于 2022-1-6 10:59
您好,目前在4.6.2,以及5.0以上的版本中均未发现问题,如果你这边是老版本,建议你可以先升级版本测试一下 ...

@Richard.Ma   代入这句试下,会导致 activeCell 循环引用,并导致崩溃。
  1. string jsonstr = File.ReadAllText(jsonfilename);
  2. workbook.FromJson(jsonstr);
  3. workbook.Worksheets[0].ToJson();
复制代码
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-6 16:33:11
4#
加入后也没有重现问题,附件是测试的demo用的是5.0版本,你可以下载测试一下,看看是否是版本问题

ConsoleApp2.zip (4.4 MB, 下载次数: 119)
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2022-1-6 18:05:44
5#
本帖最后由 jyjc 于 2022-1-6 18:08 编辑
Richard.Ma 发表于 2022-1-6 16:33
加入后也没有重现问题,附件是测试的demo用的是5.0版本,你可以下载测试一下,看看是否是版本问题

我们用的 后端版本 4.1.0.658,能重现该问题,请使用该版本尝试

ConsoleApp2_本地测试.zip

8.97 MB, 下载次数: 96

问题版本

回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2022-1-26 09:20:35
7#
本帖最后由 jyjc 于 2022-1-26 11:43 编辑
Richard.Ma 发表于 2022-1-6 23:36
嗯,老版本确实可以重现,这个应该是在新版本中已经修复了,建议升级到新版本即可,升级到4.2.6就行

该问题产生原因是,复制单元格并插入到新行,就能重现该问题。
,我们这边升版本的影响比较大(不会进行版本升级),能否通过替换 tojson的方法来处理?tojson里面是否有特殊操作?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-26 18:16:43
8#
我看你提到了“复制单元格并插入到新行”,可以重现此问题,

这个操作是在spreadjs中还是哪里,建议可以列出详细的重现此json的操作步骤,然后我发给研发那边看看有没有workaround,如果没有的话,还是需要升级版本

另外,您提到的升级版本影响较大主要是哪一方面,是新版本有什么功能问题无法使用吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部