Gson → kotlinx.serialization

Gson → kotlinx.serialization

老写法(Java + Gson)

java 复制代码
Gson gson = new Gson();

// 序列化
Item item = new Item(1, "商品", 9.99);
String json = gson.toJson(item);

// 反序列化
Item parsed = gson.fromJson(json, Item.class);
List<Item> list = gson.fromJson(jsonArray,
        new TypeToken<List<Item>>(){}.getType());

问题在哪里

Gson 基于反射,Kotlin 的 data class 用 Gson 会碰到 null 安全问题------Gson 可以绕过 Kotlin 的非 null 检查给一个字段设为 null。Kotlin 默认参数也不被 Gson 识别。

新写法(kotlinx.serialization)

kotlin 复制代码
@Serializable
data class Item(
    val id: Long,
    val name: String,
    val price: Double = 0.0
)

val json = Json { ignoreUnknownKeys = true; coerceInputValues = true }

// 序列化
val jsonString = json.encodeToString(Item(1, "商品", 9.99))

// 反序列化
val item = json.decodeFromString<Item>(jsonString)
val list = json.decodeFromString<List<Item>>(jsonArray)

一句话注意

kotlinx.serialization 不依赖反射,编译期生成序列化代码。Kotlin 的非 null 类型和默认参数都被正确处理------JSON 里缺了 price 字段就用默认值 0.0,而不是 Gson 那样的 null。

coerceInputValues = true 是 Kotlin 2.x 新增的配置,遇到 JSON null 值会自动用默认值替代,不会抛异常。Gson 迁移时如果不想改所有调用方,可以加这个配置兼容。


Java Android 老项目迁移系列,持续更新中。

相关推荐
程序猿乐锅11 分钟前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路23 分钟前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData1 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat1 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
Flynn Liang1 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞1 小时前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
橙光成长2 小时前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
深圳雨林凯AI2 小时前
图案裂变的底色衰减:alpha通道、亮度对比与白墨分色的量化拆解
android