我过去成功地序列化和反序列化了一个密封类,并声明使用 Jackson 而不是 Gson 作为我的序列化引擎。
我的密封类已定义为:
@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
是一个特定于 Jackson 的注释,但如果此功能是必须的,也许您可能会考虑从 Gson 切换 - 或者您可能能够找到 Gson 的等效配置,该配置也将在您的序列化数据中包含类标识符。