gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:45:01 25 4
gpt4 key购买 nike

我正在从字节数组解析 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/

25 4 0
文章推荐: java - 验证月份输入 01 和 1?
文章推荐: java - JMeter:使用 jackson jar 时出现 NoClassDefFoundError 错误
文章推荐: java - 无法将对象添加到实例化为 ArrayList 的 List