簡體   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