В прошлом я успешно сериализовал и десериализовал запечатанный класс с отказом от использования Джексона, а не Гсона в качестве механизма сериализации.
Мой запечатанный класс был определен как:
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, visible = true)
sealed class FlexibleResponseModel
class SnapshotResponse(val collection: List<EntityModel>): FlexibleResponseModel()
class DifferentialResponse(val collection: List<EntityModel>): FlexibleResponseModel()
class EventDrivenResponse(val collection: List<EntityEventModel>): FlexibleResponseModel()
class ErrorResponse(val error: String): FlexibleResponseModel()
С использованными аннотациями не требовалось дополнительной настройки для экземпляра Jackson для правильной сериализации и десериализации экземпляров этого запечатанного класса. что обе стороны сообщения обладали единообразным определением запечатанного класса.
Хотя я признаю, что JsonTypeInfo
является аннотацией c, определяемой Джексоном, возможно, вы могли бы подумать о переключении с Gson, если эта функция необходима, или вы можете найти эквивалентную конфигурацию для Gson который также включал бы идентификатор класса в ваши сериализованные данные.