繁体   English   中英

如果已将特定类型的对象序列化为JSON作为对象,则如何从Java中的JSON反序列化特定类型的对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM