使用gson反序列化EnumMap

时间:2017-04-10 18:53:00

标签: java dictionary enums gson

我有一个json字符串,格式如下所示,我正在尝试使用gson反序列化

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

以下是我班级和校友的结构

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

   public enum EnumType {
     MAPS;
}

当我尝试使用

反序列化它时
new Gson().fromJson(jsonString, Configuration.class)

我为enumToObjectMap获取空值。请帮助我。

2 个答案:

答案 0 :(得分:1)

可能有更正确的解决方案,但这里有几个解决方法:

  1. 将JSON字符串包装在父字段中:

    jsonString = "{\"enumToObjectMap\":" + jsonString + "}";
    Configuration c = new Gson().fromJson(jsonString, Configuration.class);
    
  2. 单独反序列化地图并通过构造函数或setter将其传递到您的类中:

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

答案 1 :(得分: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);