Kotlinx 序列化,避免其他数据类型崩溃

2023-12-21

我在应用程序中使用外部 API,而反序列化是使用 Kotlinx 序列化包完成的,当 api 结果是多个值的 Int 数组和单个值的原始 int 时,我遇到问题。我怎样才能避免在此过程中崩溃。是否有更好的方法来避免崩溃或创建数据类

ex:

import kotlinx.serialization.Serializable

@Serializable

data class Bookings (val slots: List<Int>)

当槽具有单值 API 返回时{slots: 1}当槽有多个值 API 返回时{ slots: [1,2,3,4]}


可以使用自定义序列化器来完成:

import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonInput
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.int

@Serializable(with = BookingsSerializer::class)
data class Bookings(val slots: List<Int>)

@Serializer(forClass = Bookings::class)
object BookingsSerializer : KSerializer<Bookings> {
    override fun deserialize(decoder: Decoder): Bookings {
        val json = (decoder as JsonInput).decodeJson().jsonObject
        return Bookings(parseSlots(json))
    }

    private fun parseSlots(json: JsonObject): List<Int> {
        val slotsJson = json["slots"] ?: return emptyList()
        return try {
            slotsJson.jsonArray.content.map { it.int }
        } catch (e: Exception) {
            listOf(slotsJson.int)
        }
    }
}

@ImplicitReflectionSerializer
fun main() {
    val json = """{"slots": 1}"""
    val result = Json.parse<Bookings>(json)
    println(result) // prints Bookings(slots=[1])
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlinx 序列化,避免其他数据类型崩溃 的相关文章

随机推荐

  • 进程死亡后的内存泄漏和其他资源

    假设一个程序存在内存泄漏 1 当进程死亡 通常或分段错误 时 那些泄漏的内存是否被释放 2 那又怎么样其他资源一个过程成立吗 对于大多数现代操作系统 Linux Windows NT 3 5 左右 来说 是的
  • 如何配置我的 makefile 以进行调试和发布版本?

    我的项目有以下 makefile 我想将其配置为发布和调试版本 在我的代码中 我有很多 ifdef DEBUG宏已就位 因此只需设置该宏并添加 g3 gdwarf2给编译器的标志 我怎样才能做到这一点 CC g g3 gdwarf2 cc
  • 更改后重新处理请求

    我正在尝试使用passport js以通用方式 在调用之前更改配置authenticate 但我找不到之后将请求重定向到它的方法 我这样处理请求 入口点 app get authorize clientId network authUtil
  • zmq::message_t发送后可以重复使用吗?

    我正在使用 ZeroMQ 来实现一个玩具通信协议 这是我第一次使用这个框架 库 现在 在我的协议中 某一方发送多个连续消息 所有消息都具有相同的大小 所以 我想 我会避免重新分配它们 而只是尝试用不同的内容重新填充消息数据缓冲区 例如 zm
  • 从 python 嵌套列表在 pandas 中创建新列

    我有一个熊猫数据框 其中一列有一个嵌套列表 我想从嵌套列表创建新列 Example L 1 2 4 5 6 7 8 9 3 5 我希望嵌套列表中的所有元素都作为列 如果列表有该元素 则该值应为 1 如果没有 则该值应为零 1 2 4 5 6
  • SDK 错误:0x8D07,在 C# 中使用 Canon SDK 时

    我只下载源教程here http www codeproject com Articles 688276 Canon EDSDK Tutorial in Csharp 当我连接佳能 70D 运行它时 出现以下错误 我错过了什么重点 错误 错
  • ajax请求时禁用按钮

    我编写了一条指令 有助于在 ajax 请求挂起时禁用按钮 这是我的指令 directive requestPending http function http return restrict A scope requestPending l
  • 如何检查数组是否为空或存在?

    第一次加载页面时 我需要检查是否有图像image array并加载最后一张图像 否则 我禁用预览按钮 提醒用户按下新图像按钮并创建一个空数组来放置图像 问题是image array in the else一直开火 如果数组存在 它只是覆盖它
  • vim 中的向后杀字?

    是返回并删除一个词的最快方法Esc or Ctrl and db 我想我搞砸了很多 P 并且习惯了使用M
  • Spring Boot - 自动装配数据源 Bean

    我有一个基本的 Spring Boot 应用程序 注释如下 SpringBootApplication public class ApiApplication public static void main String args Spri
  • java Finals 是否有助于编译器创建更高效​​的字节码? [复制]

    这个问题在这里已经有答案了 可能的重复 Java中使用final关键字会提高性能吗 https stackoverflow com questions 4279420 does use of final keyword in java im
  • 获取 Facebook 页面拥有的事件列表

    有谁知道如何获取 Facebook 页面拥有 创建 的活动列表 我似乎能够使用 graph api 来生成实体参加的事件列表 我还查看了 FQL 但它似乎要求 where 子句是可索引字段 当然 id 是唯一可索引字段 为了获得奖励积分 我
  • vista有没有API来检测桌面是否全屏运行?

    例如 用户是否全屏播放电影 或者以全屏模式查看 powerpoint 我发誓我以前见过 IsFullScreen Interactive API 但现在找不到它 我是这样解决这个问题的 using System using System C
  • 将 Java 系统退出值返回到 bash 脚本

    我正在尝试从 java 程序获取返回值 System exit 1 到 shell 脚本中 但它似乎返回 jvm 退出代码 如果它不崩溃 则该代码始终为 0 出于测试目的 这是我的 main 中的第一行 有人知道怎么做吗 我的bash代码
  • SELECT COUNT(*) - 如果没有匹配的行,则返回 0 以及分组字段

    我有以下查询 SELECT employee department count AS sum FROM items WHERE employee 1 AND department 2 OR employee 3 AND department
  • asyncore python 挂起

    我尝试使用 asyncore 做简单的异步 http 客户端 这段代码工作正常并且输出 足够快 www gmail com recv http code 301 www yandex ru recv http code 200 www py
  • 重复一段代码固定次数

    我试图在不使用条件的情况下重复一段代码 但仍然只重复特定次数 基本上是这样的 repeat 50 Do stuff here 有没有办法做到这一点 除了复制粘贴50次之外 我这样做是因为我想如果我知道我想重复某件事多少次 它会比每次都检查条
  • 使用双指针进行动态分配

    我有一个基类 Toy 和派生类 Toy remote car amd Toy battery car 我正在这样做 Toy ptr ptr new Toy ptr 0 new Toy remote car 1 ptr 1 new Toy b
  • 为什么material-ui占用太多空间?

    我正在使用 webpack 来捆绑我的 React 项目 我的项目依赖于以下组件的material ui material ui Dialog material ui styles getMuiTheme material ui style
  • Kotlinx 序列化,避免其他数据类型崩溃

    我在应用程序中使用外部 API 而反序列化是使用 Kotlinx 序列化包完成的 当 api 结果是多个值的 Int 数组和单个值的原始 int 时 我遇到问题 我怎样才能避免在此过程中崩溃 是否有更好的方法来避免崩溃或创建数据类 ex i