繁体   English   中英

使用Gson对通用类型进行Java反序列化

[英]Java deserialization of generic type with Gson

我正在尝试反序列化一些通用类型。 它工作得很好,但是我想将这段代码换成一个方法。

Type listType = new TypeToken<TestResult<MyObject>>(){}.getType();
TestResult<MyObject> result = new Gson().fromJson(json, listType);

如何做到这一点,证明有关类型的信息?

是的你可以。 有一种解决方法。 您只需要显式地将“ MyObject”的类型和类传递给该方法。

根据您的情况,开发一种具有以下签名和正文的方法。

public <T> Object getGenericDataObjectFromJson(String json, Type t, Class<T> type) {

        // Convert Json String to Java object
         TestResult<T> obj = gson.fromJson(json, t);

        return obj;
    }

哪里

  1. 字符串json =您的json字符串
  2. 类型listType =您的listType对象作为参数传递
  3. 类类型= 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<DataObject<objectType>>(){}.getType();

TestResult<MyObject> resultObject= (TestResult<MyObject>) gs.getGenericDataObjectFromJson(jsonObj.toString(), objectType, MyObject.class);

你不能 在运行时无法确定泛型的类型。

一个简单的解决方法是将一个方法添加到MyObject以返回所得的Type(如代码示例的第一行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM