不贴代码了,看着不清晰
def ClassA ClassB ClassC ClassD
ClassA 中有 ClassB 类型的成员变量
ClassB 中有 List<ClassC>
的成员变量
ClassC 中有 ClassD
序列化对象为一个ClassA中一个ClassB中两个ClassC对象组成的List,两个ClassC对象引用同一个ClassD对象。
这时反序列化,第二个ClassC对象的ClassD成员为null。$ref的结构为$.ClassB.ClassC[0].ClassD。
就是这样,如觉得描述不清晰可以回复,我可以贴代码。
4条答案
按热度按时间hzbexzde1#
另:我并不想通过不探测重复/循环引用来解决问题
wecizke32#
能提供重现问题的testcase么?
bxgwgixi3#
好的。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.ArrayList;
import java.util.List;
/**
*/
public class Test {
public static void main(String[] args) {
}
static class TestA {
int a;
List<TestB>
b;}
static class CarrierT {
int sign;
Object response;
}
static class TestB {
String text;
TestC youxi;
}
static class TestC {
String made;
}
}
z18hc3ub4#
@wenshao
如果CarriorT的response类型不是Object,而是TestA的话,反序列化是没有问题的,但两种序列化结果一样的,不能反序列化回来我觉得还是有问题的