Вы можете использовать пользовательскую (де) сериализацию, как предлагает Раф Левиен, однако Gson по-своему понимает карты.
Если вы запустите это, вы получите вывод {"A": "B"}
Map<String, String> map = new HashMap<String, String>();
map.put("A", "B");
System.out.println(new Gson().toJson(src));
Карта теперь может содержать ваши динамические ключи. Чтобы снова прочитать этот Json, вам нужно сообщить Gson об информации о типе через TypeToken, который является способом записи информации о типе во время выполнения, которую стирает Java.
Map fromJson =
new Gson().fromJson(
"{\"A\":\"B\"}",
new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));
Надеюсь, это поможет. :)