moshi使用的问题

来源:7-12 案例:数据类的 Json 序列化

An3224978

2024-08-15

val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter()
val userD= UserData(“Aiden”,“asd790831”)
println(jsonAdapter.toJson(userD)) //moshi的序列化
老师,为什么这里我按照官网文档写的 val jsonAdapter = moshi.adapter()。
会出现报错。
报错信息为:This declaration needs opt-in. Its usage must be marked with ‘@kotlin.ExperimentalStdlibApi’ or ‘@OptIn(kotlin.ExperimentalStdlibApi::class)’

第二个问题就是,如果我直接构建
val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter(UserData::class.java)
val userD= UserData(“Aiden”,“asd790831”)
println(jsonAdapter.toJson(userD)) //moshi的序列化
println(jsonAdapter.fromJson(json)) //moshi的反序列化
}
换成这样,编译没有问题,一运行就报错,这是为啥呢。
没有添加注解?

写回答

3回答

bennyhuo

2024-08-15

用反射序列化,加这个

val moshi = Moshi.Builder()
    .addLast(KotlinJsonAdapterFactory())
    .build()
文档看这里:
https://github.com/square/moshi?tab=readme-ov-file#reflection

注解处理器生成,看这里
https://github.com/square/moshi?tab=readme-ov-file#codegen
1
5
bennyhuo
回复
An3224978
你试试就知道区别了
2024-08-16
共5条回复

bennyhuo

2024-08-15

你没有加adapter吧,起码加一下反射库和反射的adapter。
1
0

bennyhuo

2024-08-15

第一个,用到了标准库不稳定的api,按提示加一下注解就行了。
1
0

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程