首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Gson反序列化泛型对象"T“?

如何用Gson反序列化泛型对象"T“?
EN

Stack Overflow用户
提问于 2015-09-02 20:41:06
回答 1查看 1.3K关注 0票数 1

我知道这是一个常见的问题,但在搜索了两个小时之后,我在这里问是否有解决办法。我需要实现一个第三方接口,用于序列化和反序列化Android应用程序中的对象。我想用Gson来实现这一点。这些方法如下:

代码语言:javascript
运行
复制
@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
}

我不能用这样的东西:

代码语言:javascript
运行
复制
gson.fromJson(responseBody, new TypeToken<T>() {}.getType());

因为它返回一个类型为LinkedTreeMap的对象。Gson需要对象的类,但我只有这个T (我来自.net世界,那里的泛型更“开发人员友好”)。

在这个场景中可以获得T的原始类吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 21:35:41

正如您在注释中已经讨论过的那样,Gson不可能成为真正出色的并弄清楚原始对象是什么。如果你花了5分钟去思考它是如何工作的,你就会意识到这是不可能的。

但是,在自定义反序列化器中,您可能能够分析Json并确定它应该是哪种类型。Gson已经有了RuntimeTypeAdapterFactory来处理这个问题。有关工作示例,请参阅下面的讨论:https://stackoverflow.com/a/22081826/1768232

基本上,您可以使用这个工厂来指定json本身中的类型(它看起来类似于"type":"typename",这将使您能够进行反序列化。

如果修改json不是一个选项,您仍然可以编写一个自定义反序列化器来分析json并试图确定它应该是哪种类型,但是这种逻辑要困难得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32362704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档