【发布时间】:2015-09-02 20:41:06
【问题描述】:
我知道这是一个常见问题,但在搜索了两个小时后,我在这里询问是否有解决方案。我需要实现一个第三方接口来序列化和反序列化 Android 应用程序中的对象。我想使用 Gson 来实现这一点。 方法如下:
@Override
public byte[] serialize(Object object) throws IOException {
return new Gson().toJson(object).getBytes();
}
@Override
public <T extends Job> T deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
// problem here
}
我不能使用这样的东西:
gson.fromJson(responseBody, new TypeToken<T>() {}.getType());
因为它返回一个LinkedTreeMap 类型的对象。
Gson 需要对象的 Class,但我只有这个 T(我来自 .net 世界,泛型对开发人员更友好)。
在这种情况下是否可以获得T的原始类?
【问题讨论】:
-
不太可能。你可以做的是让
TypeToken成为deserialize的另一个参数,并强制deserialize的调用者声明他们期望的类型。否则,不行,你不能用 Gson 反序列化一个未知类型的对象。 -
我明白了。不幸的是,我既不能改变方法签名也不能改变调用者。还是谢谢。
-
那你……差不多是 SOL。您需要具体说明您期望的对象类型。
标签: java android generics gson