2017-04-10 4 views
0

Ich habe einen JSON-String im Format Deserialize wie die unten angegeben ich die Struktur meiner Klasse und Enum mit Gson
eine EnumMap mit Gson

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

Im Folgenden finden Sie deserialisieren bin versucht

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

    public enum EnumType { 
    MAPS; 
} 

Wenn ich versuche, es zu deserialisieren

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

mit ich bin get NULL-Wert für enumToObjectMap. Bitte helfen Sie mir in Bezug auf dasselbe.

+0

Wo Sie den Nullwert hinaus? –

+0

Der Wert von enumToObjectMap wird als null angezeigt. –

+0

Können Sie stattdessen den eigentlichen JSON posten? –

Antwort

0

können Sie überprüfen, mit dem Hinzufügen von diesem Code:

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

Es gibt wahrscheinlich eine richtige Lösung, aber hier ist ein paar Lösungen:

  1. Wickeln Sie das JSON-String in einem übergeordneten Bereich:

    jsonString = "{\"enumToObjectMap\":" + jsonString + "}"; 
    Configuration c = new Gson().fromJson(jsonString, Configuration.class); 
    
  2. Deserialize die Karte unabhängig und geben sie in die Klasse über Konstruktor oder Setzer:

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

Gson 2.8.0 instanziiert in diesem Fall keine'EnumMap'. Nicht sicher, ob es ein Fehler oder eine Design-Wahl ist. –

+0

Der obige Ansatz führt eine harte Codierung in meinen Code ein und ist nicht erweiterbar und generisch. Was ist, wenn später in meiner Klasse ein Objekt einer anderen Klasse erstellt wird, das auch eine Enum-Map besitzt? –

+0

Das Schreiben eines benutzerdefinierten Deserialisers für diese Klasse hat das Problem gelöst. –