Gson
не пытается адаптировать свой внутренний тип данных JsonElement
.Я не знаю, есть ли смысл, поскольку JsonElement
вид является адаптированным результатом.
Взглянув на исходный код Gson , вы можете увидеть там два метода верхнего уровня:
Для любого объекта
public String toJson(Object src) {
if (src == null) {
return toJson(JsonNull.INSTANCE);
}
return toJson(src, src.getClass());
}
Я думаю, что без копирования остальной части кода очевидно, что вышеупомянутый метод имеет поиск и настройку адаптеров (и запрос адаптера)заводы) в его пути исполнения.Но есть и такой метод, как:
Для JsonElement
public String toJson(JsonElement jsonElement) {
StringWriter writer = new StringWriter();
toJson(jsonElement, writer);
return writer.toString();
}
, и для этого пути выполнения нет поиска и установки каких-либо адаптеров, так как JsonElement
нетпредназначен для адаптации.
Так что, когда Gson
ударит по любому JsonElement
, он просто сериализует ti как отформатированную строку, и вы не можете повлиять на это с помощью любого адаптера.
Если вам действительно нужноСериализовать что-то подобное, может быть, вы могли бы создать класс-оболочку для JsonElement
, что-то вроде:
public class JsonElementWrapper {
public JsonElement jsonElement;
}
и настроить ваш TypeAdapter
, чтобы адаптировать его к `null`` или фактическому значению.