首页 > 解决方案 > 在 kotlin 中使用 Gson 序列化数据类中的密封类

问题描述

我为数据类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()
}

标签: jsonkotlingsonjson-deserializationsealed-class

解决方案


一种解决方案是RuntimeTypeAdapterFactory按照此答案中的说明使用

val valueTypeAdapter = RuntimeTypeAdapter.of(Value::class.java)
    .registerSubtype(StringArrayValue::class.java)
    .registerSubtype(StringValue::class.java)
val gson = GsonBuilder().registerTypeAdapter(valueTypeAdapter).create()

RuntimeTypeAdapter包含在 Gson 的源代码中,但不作为 Maven 工件公开。

它旨在从此处复制/粘贴到您的项目中


推荐阅读