我正在从字节数组解析 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 Base
和class RoomDetail extends Base
,然后注册一个JsonDeserializer<Base>
实现GsonBuilder
它可以尝试检测 Base
的真实类型实例。之后您可以执行以下操作:
gson.fromJson(jsonSource, Base.class);
查看更多:
- 多态对象反序列化:
- Google Gson 附加功能,从未作为工件发布,但可能对您来说是一个灵感点:
关于java - 如何从GSON解析中确定对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43825103/