2017-04-10 58 views
0

我有格式的JSON字符串作爲陳述低於我試圖使用GSON
使用GSON

{ 
    "MAPS": [ 
    { 
     "value": true, 
     "enabled": [ 
     { 
      "isoCountryCode": "USA" 
     } 
     ] 
    } 
    ] 
} 

下面反序列化是我的類的結構和枚舉

public class Configuration { 
    private Map<EnumType, List<Object>> enumToObjectMap; 
} 

    public enum EnumType { 
    MAPS; 
} 
反序列化EnumMap的

當我嘗試使用反序列化它

new Gson().fromJson(jsonString, Configuration.class) 

我GET爲enumToObjectMap設置null值。請相同的幫助我。

+0

你在哪裏得到的空值:通過構造函數或setter類? –

+0

enumToObjectMap的值爲空。 –

+0

你可以發佈實際的JSON嗎? –

回答

0

您可以添加以下代碼驗證:

BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); 
String json = ""; 
/////////////////////////// 
StringBuilder sb = new StringBuilder(); 

//////////////////////////////////// 
if (br != null) { 

    json = br.readLine(); 
    sb.append(json); 
    System.out.println(json); 
} 
JSONObject jso = new JSONObject(sb.toString()); 
System.out.println(jso); 
1

有可能是一個更正確的解決方案,但這裏有幾個解決方法:

  1. 包裹JSON字符串在父字段:

    jsonString = "{\"enumToObjectMap\":" + jsonString + "}"; 
    Configuration c = new Gson().fromJson(jsonString, Configuration.class); 
    
  2. 獨立反序列化地圖並將其傳遞到您的

    Configuration c = new Configuration(); 
    c.setMap(new Gson().fromJson(jsonString, 
         new TypeToken<EnumMap<EnumType, List<Object>>>() {}.getType())); 
    
+0

在這種情況下,Gson 2.8.0沒有實例化一個'EnumMap'。不過不知道它是一個錯誤還是設計選擇。 –

+0

以上方法將在我的代碼中引入硬編碼,並且不具有可擴展性和通用性。如果以後在我的課程中編寫另一個也具有枚舉映射的類的對象呢? –

+0

爲這個類寫一個自定義的反序列化器解決了這個問題。 –