为您的类型实现自定义 JsonSerializer / JsonDeserializer:
public class MyTypeAdapter implements JsonSerializer<MapWrapper>, JsonDeserializer<MapWrapper> {
@Override
public JsonElement serialize(MapWrapper src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
src.wrapped.entrySet().forEach(e -> obj.add(e.getKey(), new JsonPrimitive(e.getValue())));
return obj;
}
@Override
public MapWrapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
MapWrapper wrapper = new MapWrapper();
json.getAsJsonObject().entrySet().forEach(e -> wrapper.wrapped.put(e.getKey(), e.getValue().getAsInt()));
return wrapper;
}
}
然后在构建 Gson 实例时注册它:
Gson gson = new GsonBuilder()
.registerTypeAdapter(MapWrapper.class, new MyTypeAdapter())
.create();
你应该可以这样称呼它:
MapWrapper wrapper = new MapWrapper();
wrapper.wrapped.put("key1", 1);
wrapper.wrapped.put("key2", 2);
String json = gson.toJson(wrapper, MapWrapper.class);
System.out.println(json);
MapWrapper newWrapper = gson.fromJson(json, MapWrapper.class);
for(Entry<String, Integer> e : newWrapper.wrapped.entrySet()) {
System.out.println(e.getKey() + ", " + e.getValue());
}
这应该打印出来:
{"key1":1,"key2":2}
key1, 1
key2, 2