У меня есть код библиотеки, который мне нужно сериализовать. Одно поле определено как интерфейс Foo, который является просто маркерным интерфейсом. Предполагается, что клиентский код создает Enum, реализующий Foo
, чтобы они могли расширять список подтипов по мере необходимости.
Я не могу сериализовать это в Gson с помощью адаптера типа. Исключение, которое я получаю:
java.lang.IllegalStateException: не объект JSON: «SETUP»
где setup — это один элемент клиентского перечисления Bar
.
Я добавил TypeAdapter
, который определяет Foo
как супертип, а Bar
как подтип, используя код Gson RuntimeTypeAdapter
(помощник Gson от Google). Любые идеи о том, что я делаю неправильно, или такая структура просто не поддерживается Gson?
Я считаю, что могу обойти это, сделав Foo
абстрактным классом, а Setup
подклассом, но это немного менее хорошо, поскольку перечисление на самом деле является просто токеном.