[翻译]Kotlin的Json序列化速成,不用Gson

本文介绍了Kotlin如何实现Json序列化,作为Gson的替代方案。从配置、使用方法到序列化和反序列化的具体操作,以及如何处理忽略和可选字段。还提及Kotlin的Json序列化支持运行时依赖性和编译器插件,并提供了相关面试题和Android开发知识的概述,涵盖Handler、Activity、Fragment、Service等多个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你想将你的Data class序列化为Json或者反之,应该很简单,Json这个东西出来已经很久了。 在Android开发中或者说传统的Java开发中,这种任务通常交由一个外部库来完成,这个库通常来说都是谷歌的Gson,但近来随着带有null aware特性的Kotlin语言的推出,用这个库的话就缺少了点优雅。 当然除了Gson还有其它的库可以用(如:Moshi),至于Kotlin本身,自从1.3版本后,它提供了自己的Json序列化和反序列化方式(也支持protoBuf)。

配置

Kotlin自己的方法是一个通过一个具有运行时依赖性的编译器插件,需要修改一下Build.gradle文件,之后就很简单了。

[...]

apply plugin: 'kotlinx-serialization' //1

[...]

dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0" //2

    [...]
} 

查看官方文档浏览最新的版本

使用方法

在你的Data类中添加@Serializabe注解,普通的类也是可以加这个注解的,只不过有更多的限制。

@Serializable
data class MyThing(
     val data: List<Data>,
     val success: Boolean
 ) {
     @Serializable
     data class Data(val balance: String)
} 

注意如果你的Data类里面用到另一个Data类,则该类也要添加@Serializable注解

序列化和反序列化

很简单,如下 Json字符串转成Data类

val myThing: MyThing = Json.parse(MyThing.serializer(), myThingInJsonText) 

Data类转Json

val myThingInJsonText: String = Json.stringify(MyThing.serializer(), myThing) 

上面用到的静态对象Json提供了序列化的默认配置,根据官方文档,这个配置是合理的,但不能保证永远不会改变。因此,为了避免令人不快的意外,您可以使用稳定的配置获取实例,以保证今天有效的任何东西明天都能正常工作。查看文档了解更多详细信息。

val json = Json(JsonConfiguration.Stable)
json.parse(.....)
json.stringfy(.....) 

忽略和可选字段

通常会有可选字段的需求,比如序列化的时候忽略某些字段,通过给某个字段设定一个默认值即可将该字段变成可选的。

@Serializable
data class MyThing(
     val data: List<Data>,
     val success: Boolean = false
 ) {
     @Serializable
     data class Data(val balance: String)
} 

要忽略一个字段,仅需添加@Transient注解

@Serializable
data class MyThing(
     val data: List<Data>,
     @Transient
     val success: Boolean
 ) {
     @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值