Kotlin-Serialization
- 从Net3开始支持使用 Kotlin-Serialization (以下简称ks)
- 更多了解请阅读: Kotlin最强解析库 - kotlin-serialization
特点¶
- 官方库
- 动态数据类型解析
- 自定义序列化器
- 支持ProtoBuf/JSON等数据结构序列化
- 非空覆盖(即JSON字段为null则使用变量默认值)
- 启用宽松模式, JSON和数据类结构无需一致
- 解析任何类型(Map/List/Pair...)
强制注解
ks的数据类都要求使用注解@Serializable
(除非自定义解析), 父类和子类都需要
依赖¶
Project build.gradle
Model build.gradle
apply plugin: "kotlin-kapt"
apply plugin: 'kotlinx-serialization'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0"
配置转换器¶
这里使用示例代码中 SerializationConvert 作为演示
使用¶
scopeNetLife {
val userList = Get<List<UserModel>>(Api.PATH) {
converter = SerializationConvert()
}.await()
tv.text = userList[0].name
}
常用配置¶
以下为反序列化Json常用配置
val jsonDecoder = Json {
ignoreUnknownKeys = true // 数据类可以不用声明Json的所有字段
coerceInputValues = true // 如果Json字段是Null则使用数据类字段默认值
}
数据类使用默认值
启用默认值¶
当coerceInputValues = true
时, json字段为null数据类字段为非空类型情况下采用字段默认值, 没有默认值请explicitNulls = false
则赋值为null
同时当出现未知的枚举类型也会使用默认值
字段缺失¶
通过explicitNulls
来配置字段缺时处理方式
- 反序列化时, 如果数据类缺失字段, 使用
ignoreUnknownKeys = true
就会自动使用默认值, 没有默认值请explicitNulls = false
赋值为null - 序列化时, 数据类如果字段为null也会被赋值到json中,
explicitNulls = false
可以忽略掉
自动生成¶
手动写默认值太麻烦, 推荐使用插件生成默认值
插件具体配置使用请查看: 数据模型生成插件