gson - отличная библиотека - она работает хорошо. Иногда у меня есть пользовательские требования, а также можно создавать и регистрировать TypeAdapters и TypeAdaptorFactories - и это тоже хорошо работает.
Что меня смущает, так это то, как делегировать обратно в сериализацию json... В большинстве случаев мне это нужно для коллекций, но для иллюстрации точки - предположим, что у меня был парный класс, который, несомненно, сериализовал бы сериал, но по какой-то причине мне нужен мой собственный сериализатор. Ну... если моя пара
public class Pair
{
public final Object First;
public final Object Second;
public Pair( Object first, Object second) {this.first = first; this.second = second};
}
Если я написал адаптер типа для этого - вы хотели бы, чтобы функция записи выглядела так:
public void write( JsonWriter out, Pair pair )
{
out.beginObject();
out.name( "first");
out.value( pair.first ); // can't do this
out.name( "second");
out.value( pair.second); // or this
out.endObject();
}
Итак, вы можете увидеть проблему - я понятия не имею о типах первого и второго, а также о том, как они сериализуются. Я могу использовать gson.toJson для сериализации первого и второго, но если я добавлю их в качестве строки для писателя, они будут экранированы. Существует функция gson.tojson, которая берет значение и писателя, но она также принимает typetoken, чего у меня нет. У меня такое впечатление, что я имею в виду, что у меня есть другой адаптер типа, но когда у меня есть список объектов... где я могу это получить? я просто получаю адаптер для объекта?
Я немного смущен? Наверняка это самый распространенный вариант использования? Большинство пользовательских сериализаторов будут для странного списка T или дерева T или чего-то еще, и вы действительно не знаете, что находится в списке, помимо того, что оно наследуется от T... поэтому вам нужно иметь возможность делегировать сериализация каким-то образом?
В любом случае - если кто-то может сказать мне, как написать вышеприведенную функцию, я бы очень признателен!