使用Gson对generics类型进行Java反序列化
我正在尝试反序列化一些generics类型。 它工作得很好,但我想把这段代码换成一个方法。
Type listType = new TypeToken<TestResult>(){}.getType(); TestResult result = new Gson().fromJson(json, listType);
如何做到这一点,certificate有关类型的信息?
你不能。 在运行时期间无法确定generics的类型。
一个简单的解决方法是向MyObject
添加一个方法以返回结果类型(如代码示例的第一行)。
是的你可以。 有一个解决方法。 您只需要将“MyObject”的类型和类显式传递给方法。
在您的情况下,开发具有以下签名和正文的方法。
public Object getGenericDataObjectFromJson(String json, Type t, Class type) { // Convert Json String to Java object TestResult obj = gson.fromJson(json, t); return obj; }
哪里
- String json =你的json字符串
- 输入listType =作为参数传递的listType对象
- 类类型= MyObject.class
方法调用会变成这样
GsonUtility gs = new GsonUtility();// Your gson utility class JSONObject jsonObj = "your json string"; // Explicitly identifying the type so as to pass it to the method // Because The type of a generics can't be determinted during runtime as #CKuk said Type objectType = new TypeToken>(){}.getType(); TestResult resultObject= (TestResult ) gs.getGenericDataObjectFromJson(jsonObj.toString(), objectType, MyObject.class);