我正在使用 GSON 在我的 Android 应用程序中反序列化 JSON 字符串。我的问题是,我没有检索到预期的对象,而是 LinkedTreeMap-objects,导致异常的原因:
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 sis.hierrein.android.DDL.Core.Uniqueidentifier
我的课程:
public class Uniqueidentifier {
public String OID;
}
public class Element extends Uniqueidentifier {
(...)
}
实现反序列化的方法:
public void Set(String data) throws Exception {
HashSet<T> objList = loadObject(data);
if(objList == null) {
throw new Exception("Es wurden keine Daten übergeben.");
}
for(T obj: objList) {
// Trying to iterate over each element causes the exception
}
}
// T is in this example Element
protected HashSet<T> loadObject(String data) {
Gson parser = new Gson();
HashSet<T> obj;
Type t = new TypeToken<HashSet<T>>(){}.getType();
try {
obj = parser.fromJson(data, t);
}
catch(Exception e) {
return null;
}
return obj;
}
班上
public class Handler<T extends Uniqueidentifier> {
(...)
}
包含此方法的,用作的超类
public class ElementHandler extends Handler<Element> {
(...)
}
ElementHandler 本身只包含一个构造函数,所以调用了超类的方法。背景:所有这些类都是实例化的/方法是通过反射调用的。