【问题标题】:Kotlinx Serialization, inlining sealed class/interfaceKotlinx 序列化,内联密封类/接口
【发布时间】:2022-07-22 19:05:10
【问题描述】:

结构类似如下:

@Serializable
sealed class Parameters

@Serializable
data class StringContainer(val value: String): Parameters()

@Serializable
data class IntContainer(val value: Int): Parameters()

@Serializable
data class MapContainer(val value: Map<String, out Parameters>): Parameters()

// more such as list, bool and other fairly (in the context) straight forward types

还有以下容器类:

@Serializable
data class PluginConfiguration(
// other value
    val parameters: Parameters.MapContainer,
)

我想实现(反)序列化,其中参数配置为灵活的 json(或其他)映射,正如人们通常期望的那样:

{
    "parameters": {
        "key1": "String value",
        "key2": 12,
        "key3": {}
    }
}

等等。有效地创建一个灵活的结构,该结构仍然足够结构化,不会像Any 那样完全不受控制。有一个相当明确定义的(反)序列化,但我不知道如何做到这一点。

我已尝试阅读以下内容 https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serialization-guide.md

而且我确实预感到需要多态序列化程序,但到目前为止,我遇到了两种通用结构,我认为这对我的目的来说太过分了,或者由于某种原因它找不到适合我的序列化程序子类,在为 Parameters 编写自定义序列化程序时。

【问题讨论】:

    标签: kotlin serialization


    【解决方案1】:

    您可以使用键类型为字符串、值类型为任意类型的映射。

    @Serializable
    data class PluginConfiguration(
    // other value
        val parameters: Map<String, Any>,
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      相关资源
      最近更新 更多