首页 > 其他分享 >项目中JSON序列化循环引用的问题

项目中JSON序列化循环引用的问题

时间:2023-10-24 10:46:22浏览次数:39  
标签:碰到 parent private item JSON 循环 引用 序列化

已经很多次碰到循环引用的问题了

之前碰到是在Spring中初始化过程中component之间存在循环引用怎么办

 

这次碰到,是在JSON序列话的时候碰到了循环引用导致的问题

问题原因:

在结构体中,为了实现方便数据的引用,在数据结构中加入了Parent节点,由于存在child节点,在生成json对象的时候就会存在过程一直无法结束的问题

这个问题之前在JS中也碰到过,但是当时并没有记录下来,因为当时的问题很简单就解决了,就是直接把产生循环的成员对象屏蔽

这次不屏蔽parent 直接把parent删掉,还要把删除部分的代码改一下,不再依赖parent

 

wrapper

public static class CombinationMenuItemWrapper<T> {
    private FieldInfoHc.CombinationMenuItem<T> value;
    private FieldInfoHc.CombinationMenuItem<T> parent;
    private boolean isTop;
}

 在显示的时候使用这个包装类

删除

private final IOnListMenuClickListener<CombinationMenuItemWrapper<String>>
        mOnListMenuClickListener = (view, position, item) -> {
    if (view.getId() == R.id.btnDelete) {
        if (item.isTop()) {
            mFieldInfoHc.getCombinationMenuItems().remove(item.getValue());
        } else {
            item.getParent().getChilds().remove(item.getValue());
        }
        refreshRv();
    }
};

重中之重,构建需要序列话的结构体时,要小心循环引用的问题

标签:碰到,parent,private,item,JSON,循环,引用,序列化
From: https://www.cnblogs.com/baidurenshen/p/17783426.html

相关文章

  • json的解析和生成(两种方式对比)(二)
    一:解析JSON文件       解析JSON文件用到两种方法都可以,即两种类库,都可以     用到的类库      JavaScriptSerializer类,内置于.NET中用于解析的生成JSON文件      JSON.NET库,第三方加载包    第一种用:NET自带的JavaScriptSerializer     ......
  • C# Nuget项目A引用的另一个项目C怎么被安装Nuget的项目B使用
    最近整理的一个Nuget项目A,我从原先Nuget项目A抽取了一个新项目C,然后项目A引用了项目C。当项目A的Nuget被项目B引用后,发现项目B并不能直接访问项目C的成员。(只能在项目B引入项目C或者项目C也打包成Nuget包,项目B安装项目C的Nuget包)经过组内大佬 唐宋元明清2188 的指点,只需要在项......
  • json简介&语法(一)
    简介:    轻量级的数据交换格式,独立于语言,与JavaScript对象的语法相同。可用于存储应用程序数据。比XML轻量。语法:  json包含值,对象,数组值:字符串,数值,真,假,空值,对象,数组如图:      一:JSON对象  1.名称/值对使用冒号  2.用花括号括起  3.用逗号......
  • IO流,对象流,将对象序列化到文件中,将对象反序列化到内存中
    一一一、序列化!!一、首先创建一个对象类,实现Serializable标记接口 对象中,实现了接口,三个私有属性,并且创建了无参有参构造,get和set方法和toString方法 (一个标准的对象模型)二、序列化到外部文件 结果: 也是一堆乱码,还是因为用字节输出的原因。 二二二、反序列化! 结......
  • 随手笔记:Swagger 报错 NO Found /swagger/V1/swagger.json
    开发本地测试没问题,发布iis报错原因:swagger判断开发环境和发布环境解决办法:在startup.cs文件中找到调用swagger方法不做判断app.UseSwagger();      app.UseSwaggerUI(c=>c.SwaggerEndpoint("/swagger/v1/swagger.json","MyWebAPIV1"));如图所示:......
  • 10月23日粘包、struct模块以及json模块
    目录粘包如何解决粘包问题呢?struct模块json模块粘包粘包:tcp会把数据量较小,时间间隔较短的数据,当做同一个包发送粘包问题图粘包问题说白了就是客户端传给服务器的数据到服务器的时候有部分数据粘在了一块,而不是一条条的显示粘包产生情况大致图如何解决粘包问题呢?简单的方......
  • Java Map填充Json模版,并生成Json文件
    一、准备工作引入基础的springboot环境引入freemark依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>创建json模版......
  • 10月23日粘包学习以及struct模块和json模块
    目录粘包如何解决粘包问题呢?struct模块json模块粘包粘包:tcp会把数据量较小,时间间隔较短的数据,当做同一个包发送粘包问题图粘包问题说白了就是客户端传给服务器的数据到服务器的时候有部分数据粘在了一块,而不是一条条的显示粘包产生情况大致图如何解决粘包问题呢?简单的方......
  • 一键解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    json.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)文章目录问题描述解决思路解决方法问题描述json.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)解决思路JSONDecodeError是指在使用json.loads()方法时,解析JSONJSONDecodeError是......
  • 序列化
    ###Serializer#models.pyfromdjango.dbimportmodelsclassRole(models.Model):title=models.CharField(verbose_name="标题",max_length=32)order=models.IntegerField(verbose_name="顺序")#views.pyfromdjango.dbimportmode......