我有几个包含彼此递归依赖的类,我使用 Gson GraphAdapterBuilder 将它们序列化为 JSON 格式,并且它运行良好。现在我想将它们反序列化为相同的结构,但不知道如何做。
我举了个例子:
class ClassA{
public int field;
public ClassB parent;
public ClassA(int f, ClassB p){
field = f;
parent = p;
}
}
class ClassB{
public Vector<ClassA> vector = new Vector<ClassA>();
}
...
ClassB b = new ClassB();
ClassA a1 = new ClassA(1,b);
ClassA a2 = new ClassA(2,b);
ClassA a3 = new ClassA(3,b);
b.vector.add(a1);
b.vector.add(a2);
b.vector.add(a3);
//Serializing object b
GsonBuilder gsonBuilder = new GsonBuilder();
new GraphAdapterBuilder()
.addType(ClassA.class)
.addType(ClassB.class)
.registerOn(gsonBuilder);
Gson gson = gsonBuilder.create();
String json = gson.toJson(b);
输出给了我我想要的:
{"0x1":{"vector":["0x2","0x3","0x4"]},"0x2":{"field":1,"parent":"0x1"},"0x3":{"field":2,"parent":"0x1"},"0x4":{"field":3,"parent":"0x1"}}
有没有办法将该 json 字符串反序列化回 ClassB 的对象?
最佳答案
好的,我找到了解决方案。这很简单。只需使用具有相同 GraphAdapterBuilder 结构的函数 fromJson 而不是 toJson。
...
GsonBuilder gsonBuilder = new GsonBuilder();
new GraphAdapterBuilder()
.addType(ClassA.class)
.addType(ClassB.class)
.registerOn(gsonBuilder);
gson = gsonBuilder.create();
СlassB B = gson.fromJson(json,ClassB.class);
System.out.println("B " + B.vector);
for(ClassA classA:B.vector){
System.out.println(classA.field + " " + classA.parent);
}
输出是:
B [ClassA@10178f2b, ClassA@7ab8584d, ClassA@5cad662c]
1 ClassB@7c0f023c
2 ClassB@7c0f023c
3 ClassB@7c0f023c
关于java - Gson反序列化具有递归依赖的复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204796/