【发布时间】:2022-01-11 03:21:52
【问题描述】:
我设法使用 gson 将一个极其复杂的类(其中嵌套了 50 个自定义 java 对象)序列化为 json 字符串。 这是我的一部分对象:
public class MyComplexObject{
private int a;
private String b;
private MyclassA c;
...
private map<String, Object> x;
}
请注意,对于字段private map<String, Object> x,VALUE Object 可以是Integer、Double、String、myClassC 等......
序列化的时候效果很好,但是反序列化的时候gson无法按照我的预期转换json字符串。
MyClassC:
public class MyclassC{
public String d;
public List<Integer> e;
}
这是一个例子:
MyComplexObject myComplexObject = new MyComplexObject();
myComplexObject.seta(1);
myComplexObject.setb("abc");
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
MyClassC myClassC = new MyClassC("key1", list);
myComplexObject.setx(myClassC);
// Serializing and Deserializing
String myComplexObjectStr = gson.toJson(myComplexObject);
MyComplexObject myComplexObject2 = gson.fromJson(myComplexObjectStr, MyComplexObject.class);
// after deserializing, x has been converted to LinkedTreeMap
myComplexObject.x.getClass(); // class MyClassC
myComplexObject2.x.getClass(); // class com.google.gson.internal.LinkedTreeMap
// Go further about the field x
Object object = myComplexObject2.x.get("key1");
LinkedTreeMap linkedTreeMap = (LinkedTreeMap) object;
ArrayList arrayList = (ArrayList) linkedTreeMap.get("e");
arrayList.get(0).getClass(); // class java.lang.Double
所以在序列化和反序列化之后:
- MyClassC 已转换为 LinkedTreeMap
- List
已转换为 List
所以我的问题是:我应该怎么做才能确保MyComplexObject在序列化和反序列化后完全相同?
【问题讨论】:
-
我已经更新了我的帖子以清楚地描述它,感谢您的建议。
标签: java serialization gson deserialization