[英]How to deserialize object of specific type from JSON in Java if it was serialized to JSON as Object?
我是Java新手!
我的目标:我收集了Objects,使我可以通过某个键(例如Map)保留任何类型的对象(将它们放入并从中获取)。 我可以向其中添加任何类型的对象(例如,可以添加MyClass的对象)。 然后,我使用GSON将这个对象序列化为JSON格式的单独字符串(然后,例如,我可以将该字符串序列化为单独的文件)。 当我想找回一些对象时,我通过键从集合中请求它,集合将对应的字符串反序列化为Object对象并返回给我。 然后,将其强制转换为MyClass才能使用此对象。
下面的代码跳过了集合的工作:
Gson gson = new Gson();
Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
String json = gson.toJson(myClass); //serializing to JSON
Object myClass1 = gson.fromJson(json, Object.class); //imitation of deserializing and getting object from collection
Main.MyClass myClass2 = (Main.MyClass) myClass1;
此代码的最后一个字符串引发java.lang.ClassCastException,因为“ gson.fromJson(json,Object.class);” 返回类型为“ com.google.gson.internal.LinkedTreeMap”的对象
我如何达到目标???
这可能是因为当您使用gson.fromJson(json, Object.class)
, gson.fromJson(json, Object.class)
转换为对象而不是MyClass,也许是如果使用gson.fromJson(json, MyClass.class)
然后将其gson.fromJson(json, MyClass.class)
为将返回正确的值。 否则,他们将创建一个简单的对象类。
gson.fromJson(json, Object.class);
强制转换为LinkedTreeMap(请参阅ObjectTypeAdapter.read(JsonReader in)
gson源)。
尝试这个:
Gson gson = new Gson();
Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
String json = gson.toJson(myClass); //serializing to JSON
Main.MyClass myClass2 = gson.fromJson(json, Main.MyClass.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.