看看以下代码,它可以正常工作:
MyData myData = new MyData(1, "one");
MyData myData2 = new MyData(2, "two");
MyData [] data = {myData, myData2};
String toJson = gson.toJson(data, MyData[].class);
MyData [] newData = gson.fromJson(toJson, MyData[].class);
MyData只是一个带有int和String字段的简单类。这完全没问题。但是如果直到运行时才知道该类呢?例如它可能不是“MyData”,但可能是一个完全不同的类。我们唯一知道的是类的名称(表示为字符串),以前由发件人使用Class.forName确定。
如果对象不是数组,它可以正常工作,如下所示:
final Class<?> componentType = Class.forName(componentClassName);
context.deserialize(someElement, componentType);
上述技术不适用于数组。
有什么建议吗?
答案 0 :(得分:1)
在java中,您可以通过调用
来获取对象的类object.getClass();
来自java docs:
class Test {
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
}
打印:
class [I
class java.lang.Object
答案 1 :(得分:1)
你的意思是MyData会成为通用类型T吗?如果是这样,由于Javas类型的擦除,你将无法做到这一点。类型T仅在编译时可用。
您可以创建一个方法:
public T decodeJSON(String json, Class<T> type) {
GSON gson = new GSON();
return gson.fromJson(json, type);
}
答案 2 :(得分:-1)
String toJson = gson.toJson(Class.forName(obj, runtimeClassName + "[]"));