Сериализация общей коллекции с использованием gson - PullRequest
0 голосов
/ 17 октября 2019

Я хотел бы сериализовать следующий класс, используя gson:

public class SerializableCollection<T> {

    private final Collection<T> collection;

Проблема в том, что тип элемента теряется после десериализации. Например, если коллекция содержит записи enum, десериализованный экземпляр будет содержать строки. Я знаю, что универсальный тип стирается во время компиляции, но есть ли способ сказать gson сериализовать тип элементов коллекции, чтобы при десериализации он мог создавать соответствующие объекты?

Я пыталсяс TypeToken:

final Type typeToken = new TypeToken<SerializableCollection<T>>() {}.getType();

, но это не похоже на работу. Спасибо!

1 Ответ

0 голосов
/ 17 октября 2019

Согласно Руководству пользователя Gson вам необходимо использовать TypeToken, но с правильным типом вместо T.

Так что если вы измените объект Type на:

final Type typeToken = new TypeToken<SerializableCollection<TheCorrectClassName>>() {}.getType();

Это должно работать.

Но, следовательно, вам все равно нужно знать правильный тип во время компиляции. Думаю, без знания типа это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...