如何从GSON解析中确定对象的类别? [英] How to determine class of object from GSON parse?

查看:723
本文介绍了如何从GSON解析中确定对象的类别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我如何确定对象的类别?

  Object objDeserialized = gson.fromJson(jsonFromString,Object.class); 
//它可以是类型消息或RoomDetail


解决方案

< blockquote>

gson.fromJson(jsonFromString,Object.class);

一般来说,这不会因为 Object.class 而工作。 Gson禁止重写 Object 类的反序列化并使用 ObjectTypeAdapter (请参阅主 Gson gson 2.8.0构造函数,可能更早):
$ b

  //内置类型适配器不能被重写
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
factories.add(ObjectTypeAdapter.FACTORY);

//排除器必须位于处理用户定义类型的所有适配器之前
factories.add(excluder);

//用户类型适配器
factories.addAll(typeAdapterFactories);

如果您想使用 Object.class ,您必须将结果转换为原始包装, null List< E> 或映射< K,V> - 并自行进行某种分析。它背后的基本原理是,你必须事先知道结果类,以确保你得到一个正确的反序列化的对象。



最好的你可以在这里做的事情是让你的自定义父超类型(真的不管它是一个类还是一个接口),比如 class Message扩展Base class RoomDetail extends Base ,然后注册 JsonDeserializer< Base> 实现到 GsonBuilder Base 实例的实际类型。之后,你可以这样做:

  gson.fromJson(jsonSource,Base.class); 

查看更多:



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆