Google gson Map null To empty String の入れ子

先日書いた MapSerializer
oboe2uran.hatenablog.com

入れ子でも、key : "" を適用させるには、、、registerTypeAdapter での登録に入れ子のパターンを書けばよい。

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

Gson gson = new GsonBuilder()
.registerTypeAdapter(new TypeToken<Map<String, Object>>(){}.getType(), new MapSerializer())
.registerTypeAdapter(new TypeToken<Map<String, Map<String, Object>>>(){}.getType(), new MapSerializer())
.create();

String res = gson.toJson(map , new TypeToken<Map<String, Object>>(){}.getType());

例えば、、

Map<String, Object> map = new HashMap<>();
Map<String, Object> nest = new HashMap<>();
Map<String, Object> nest2 = new HashMap<>();

nest2.put("D1", "30");
nest2.put("D2", null);

nest.put("E", nest2);

nest.put("B1", "20");
nest.put("B2", null);

map.put("A1", "1");
map.put("A2", null);
map.put("C", nest);

これは、

{"A1":"1","A2":"","C":{"B2":"","E":{"D1":"30","D2":""},"B1":"20"}}

になる。