!!! Failure "强制注解"
ks的数据类都要求使用注解`@Serializable`(除非自定义解析), 父类和子类都需要
!!! Success "生成默认值"
使用[插件生成数据Model](model-generate.md), 支持自动生成默认值和注解
生成默认值可避免后端返回异常数据导致解析崩溃, 以及反复编写判空代码
Project build.gradle
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
// 和Kotlin插件同一个版本号即可
Model build.gradle
apply plugin: "kotlin-kapt"
apply plugin: 'kotlinx-serialization'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0"
这里使用示例代码中 SerializationConvert 作为演示
=== "全局配置"
```kotlin
NetConfig.initialize(Api.HOST, this) {
setConverter(SerializationConvert())
// ... 其他配置
}
```
=== "单例配置"
```kotlin
val userList = Get<List<UserModel>>(Api.PATH) {
converter = SerializationConvert() // 单例转换器, 此时会忽略全局转换器
}.await()
```
scopeNetLife {
val userList = Get<List<UserModel>>(Api.PATH) {
converter = SerializationConvert()
}.await()
tv.text = userList[0].name
}
@Serializable
data class UserModel(var name: String, var age: Int, var height: Int)
以下为反序列化Json常用配置
val jsonDecoder = Json {
ignoreUnknownKeys = true // 数据类可以不用声明Json的所有字段
coerceInputValues = true // 如果Json字段是Null则使用数据类字段默认值
}
数据类使用默认值
@Serializable
data class Data(var name:String = "", var age:Int = 0)
当coerceInputValues = true
时, json字段为null数据类字段为非空类型情况下采用字段默认值, 没有默认值请explicitNulls = false
则赋值为null
同时当出现未知的枚举类型也会使用默认值
通过explicitNulls
来配置字段缺时处理方式
ignoreUnknownKeys = true
就会自动使用默认值, 没有默认值请explicitNulls = false
赋值为nullexplicitNulls = false
可以忽略掉手动写默认值太麻烦, 推荐使用插件生成默认值
插件具体配置使用请查看: 数据模型生成插件