@Override public Configuration deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject configurationObject = json.getAsJsonObject(); if (configurationObject.get("properties") != null) { return deserialize(configurationObject.get("properties").getAsJsonObject()); } else { return deserialize(configurationObject); } }
.registerTypeHierarchyAdapter(Map.class, new StorageEntryMapDeserializer()).setPrettyPrinting() .create(); this.entityMapper = new GsonBuilder().registerTypeAdapter(Configuration.class, new ConfigurationDeserializer()) .setPrettyPrinting().create();
private Object deserialize(JsonArray array) { List<Object> list = new LinkedList<>(); for (JsonElement element : array) { if (element.isJsonPrimitive()) { JsonPrimitive primitive = element.getAsJsonPrimitive(); list.add(deserialize(primitive)); } else { throw new IllegalArgumentException("Multiples must only contain primitives but was " + element); } } return list; }
private Configuration deserialize(JsonObject propertiesObject) { Configuration configuration = new Configuration(); for (Entry<String, JsonElement> entry : propertiesObject.entrySet()) { JsonElement value = entry.getValue(); String key = entry.getKey(); if (value.isJsonPrimitive()) { JsonPrimitive primitive = value.getAsJsonPrimitive(); configuration.put(key, deserialize(primitive)); } else if (value.isJsonArray()) { JsonArray array = value.getAsJsonArray(); configuration.put(key, deserialize(array)); } else { throw new IllegalArgumentException( "Configuration parameters must be primitives or arrays of primities only but was " + value); } } return configuration; }