我知道这是一个常见的问题,但在搜索了两个小时之后,我在这里问是否有解决办法。我需要实现一个第三方接口,用于序列化和反序列化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需要对象的类,但我只有这个T (我来自.net世界,那里的泛型更“开发人员友好”)。
在这个场景中可以获得T的原始类吗?
发布于 2015-09-02 21:35:41
正如您在注释中已经讨论过的那样,Gson不可能成为真正出色的并弄清楚原始对象是什么。如果你花了5分钟去思考它是如何工作的,你就会意识到这是不可能的。
但是,在自定义反序列化器中,您可能能够分析Json并确定它应该是哪种类型。Gson已经有了RuntimeTypeAdapterFactory来处理这个问题。有关工作示例,请参阅下面的讨论:https://stackoverflow.com/a/22081826/1768232
基本上,您可以使用这个工厂来指定json本身中的类型(它看起来类似于"type":"typename",这将使您能够进行反序列化。
如果修改json不是一个选项,您仍然可以编写一个自定义反序列化器来分析json并试图确定它应该是哪种类型,但是这种逻辑要困难得多。
https://stackoverflow.com/questions/32362704
复制相似问题