首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Klaxon序列化JSON

用Klaxon序列化JSON
EN

Stack Overflow用户
提问于 2021-04-01 23:51:47
回答 1查看 80关注 0票数 0

我正在尝试开发一个允许在Kotlin中对多种类型的类进行JSON序列化/反序列化的系统。对于反序列化,我使用了klaxon,但我也想将其用于序列化。我对此做了一些研究,但没有得到结论的答案。

那么,我可以这样做吗?如果是这样,怎么做呢?或者我应该使用其他库来达到这个目的?

这是我的代码

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-04-03 05:00:39

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66907780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档