json - 使用Kotlin中的Gson在数据类中序列化Sealed类

标签 json kotlin gson json-deserialization sealed-class

我为Value数据类下的json字段CustomAttribute创建了一个密封的类。该字段可以返回StringArray of Strings

我们如何从json反序列化这个密封的类?

data class CustomAttribute (
     val attributeCode: String,
     val value: Value 
)

sealed class Value {
      class StringArrayValue(val value: List<String>) : Value()
      class StringValue(val value: String)            : Value()
}

最佳答案

过去,我成功地完成了密封类的序列化和反序列化,并且免责声明使用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的等效配置,该配置还将在序列化数据中包含类标识符。

关于json - 使用Kotlin中的Gson在数据类中序列化Sealed类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60260081/

相关文章:

arrays - 将数组映射到 kotlin 对象列表

kotlin - 如何在 Ktor 中获取 call.response 的 http body?

javascript - 如何将 JSON 数据保存到 JavaScript 中的变量

kotlin - Kotlin标准函数,如果为null则创建并返回所有结果

php - 当返回的 JSON 数据中有换行符时,jQuery UI 自动完成功能不起作用

java - 如何发布使用 GSON 解析大型 json 文件的进度

java - 将具有重复键的 JSON 对象转换为 JSON 数组

java - 将 Gson 添加到 pom.xml 但未找到

regex - 如何使用正则表达式将 JSON 对象与唯一 ID 进行匹配

android - 向服务器发送 Json String 数据