去掉fastjson循环引用功能
时间: 2023-09-03 20:07:17 浏览: 74
如果你不想使用fastjson循环引用功能,可以通过如下方式去掉循环引用检测:
1. 在使用fastjson的时候,不要设置SerializerFeature.DisableCircularReferenceDetect属性,即不要写成如下形式:
String jsonStr = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
2. 在fastjson的JSON配置对象中,将SerializerFeature.DisableCircularReferenceDetect属性设置为false,即可关闭循环引用检测功能:
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();
这样,fastjson就不会检测循环引用了。
相关问题
fastjson 循环删除
如果你需要在fastjson中实现循环引用的删除,可以使用fastjson提供的SerializerFeature.PrettyFormat属性和自定义序列化器来实现。
1. 设置SerializerFeature.PrettyFormat属性
使用SerializerFeature.PrettyFormat属性可以将fastjson生成的JSON格式化输出,这样可以更方便地查看JSON数据结构。同时,在格式化输出的过程中,fastjson会将循环引用对象标记为null,这样可以方便后续的删除操作。例如:
String jsonString = JSON.toJSONString(obj, SerializerFeature.PrettyFormat);
2. 自定义序列化器
通过自定义序列化器,可以实现对循环引用的删除。自定义序列化器需要实现com.alibaba.fastjson.serializer.ObjectSerializer接口,并实现serialize方法。在serialize方法中,可以通过判断对象是否为循环引用来决定是否输出该对象。例如:
public class MyObjectSerializer implements ObjectSerializer {
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
if (object == null) {
serializer.getWriter().writeNull();
return;
}
if (serializer.containsReference(object)) {
serializer.getWriter().writeNull();
return;
}
serializer.write(object);
}
}
在使用自定义序列化器时,需要将序列化器注册到fastjson的JSON配置对象中。例如:
SerializeConfig config = new SerializeConfig();
config.put(MyObject.class, new MyObjectSerializer());
String jsonString = JSON.toJSONString(obj, config);
这样,就可以通过自定义序列化器来实现对循环引用的删除了。
fastjson2 反序列有循环引用
Fastjson2默认不支持循环引用的反序列化,但是可以通过一些配置来支持循环引用的反序列化。具体做法如下:
1. 在序列化时,使用SerializerFeature.DisableCircularReferenceDetect禁用循环引用检测。
2. 在反序列化时,使用JSON.parseObject(String text, Type type, Feature... features)方法,其中features参数传入Feature.DisableCircularReferenceDetect。
示例代码:
```
// 序列化
String jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
// 反序列化
Object obj = JSON.parseObject(jsonString, type, Feature.DisableCircularReferenceDetect);
```
注意:使用循环引用反序列化可能会导致内存泄漏和性能问题,建议避免使用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)