java - 如何从GSON解析中确定对象的类?

标签 java object gson

我正在从字节数组解析 JSON 字符串并将其转换为对象。

如何确定对象的类?

Object objDeserialized = gson.fromJson(jsonFromString, Object.class);
//It could be type Message or RoomDetail

最佳答案

gson.fromJson(jsonFromString, Object.class);

一般来说,这不会起作用,因为 Object.class 。 Gson 禁止覆盖 Object类反序列化和使用ObjectTypeAdapter (请参阅 Gson 2.8.0 以及可能更早版本的主要 Gson 构造函数):

// built-in type adapters that cannot be overridden
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
factories.add(ObjectTypeAdapter.FACTORY);

// the excluder must precede all adapters that handle user-defined types
factories.add(excluder);

// user's type adapters
factories.addAll(typeAdapterFactories);

如果您想使用Object.class ,您必须将结果转换为原始包装器 null ,或 List<E>Map<K,V> ——然后自己做一些分析。其背后的基本原理是,您必须提前知道结果类,以确保您获得正确的反序列化对象。

在这里你能做的最好的事情就是创建你的自定义父父类(super class)型(无论它是类还是接口(interface)并不重要),比如 class Message extends Baseclass RoomDetail extends Base ,然后注册一个JsonDeserializer<Base>实现GsonBuilder它可以尝试检测 Base 的真实类型实例。之后您可以执行以下操作:

gson.fromJson(jsonSource, Base.class);

查看更多:

关于java - 如何从GSON解析中确定对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43825103/

相关文章:

java - 如何将表格添加到页眉或页脚?

java - 使用 java 连接到远程 mongodb 服务器

没有类的 Java 对象

java - 将 Key 值添加到 GSON.toJSON 生成的 Json 字符串中

java - 使用 gson 解析 JSON 数组

java - 为什么在线程之间共享静态变量会降低性能?

java - 在 Java 中打印一段单词中的每个单词,同时使用 Scanner 类跳过一些单词

javascript - 与另一个实例进行比较时,我的类实例如何隐式返回一个数字?

javascript - JavaScript 中的indexOf 和lastIndexOf

java - 具有多个策略的 Gson FieldNamingStrategy