使用Klaxon序列化JSON



我正在尝试开发一个系统,该系统为Kotlin中的多种类型的类提供JSON的序列化/反序列化功能。对于反序列化,我通常使用klaxon,但我也想将其用于序列化。我对此做了一些研究,但没有得到确切的答案。

那么,我能做到吗?如果是这样的话,怎么做呢?或者我应该为此使用其他库吗?

这是我的代码

package com.pineapple.threadio
import com.beust.klaxon.Klaxon
import com.beust.klaxon.TypeAdapter
import com.beust.klaxon.TypeFor
import kotlin.reflect.KClass
// Frame types
@TypeFor(field = "id", adapter = FrameTypeAdapter::class)
open class BasicFrame(val id: String)
class Ping : BasicFrame("0x0000")
class TransactionRequest : BasicFrame("0x0001")
class TransactionAccept : BasicFrame("0x0002")
class TransactionDeny(val deny_reason: String) : BasicFrame("0x0003")
// Frame processing
class Frame(
@TypeFor(field = "id", adapter = FrameTypeAdapter::class)
val id: String,
val frame: BasicFrame
)
class FrameTypeAdapter : TypeAdapter<BasicFrame> {
override fun classFor(id: Any): KClass<out BasicFrame> = when (id as String) {
"0x0000" -> Ping::class
"0x0001" -> TransactionRequest::class
"0x0002" -> TransactionAccept::class
"0x0003" -> TransactionDeny::class
else -> throw IllegalArgumentException("Unknown frame ID: $id")
}
}
// Actual parsing, straight from klaxon's docs
val frame = Klaxon().parseArray<Frame>(json)

@TypeFor(field = "id", adapter = FrameTypeAdapter::class)注释应该放在BasicFrame类上。它在你放它的地方是多余的。

最新更新