我知道这是一个经常被问到的问题,但在搜索了两个小时后,我在这里询问是否有解决方案。我需要实现一个第三方接口,用于序列化和反序列化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世界,其中泛型更多&#34;开发人员友好&#34;)。
在这种情况下是否可以获得T
的原始类?
答案 0 :(得分:1)
正如您在评论中已经讨论过的那样,Gson不可能非常精彩并弄清楚原始对象是什么。如果你花5分钟思考如何运作,你就会意识到这是不可能的。
但是,您可以在自定义反序列化程序中分析Json
并找出它应该是什么类型。 Gson已经为此RuntimeTypeAdapterFactory
了。有关工作示例,请参阅此讨论:https://stackoverflow.com/a/22081826/1768232
基本上,您可以使用此工厂指定json本身的类型(它看起来像"type":"typename"
,这将使您可以进行反序列化。
如果修改json不是一个选项,你可以仍然编写一个自定义反序列化器来分析json并尝试找出它应该是什么类型,但是这个逻辑是更难。