如题,安全性问题也就算了, 就当android不需要安全性了。但kotlin这东西其实安卓用得更多,和data class的兼容性不是应该android这里更需要重视吗?
[alibaba/fastjson]android版本不维护了吗?
回答
支持的,能提具体问题么?
如果楼主的问题是 data class 默认值导致的无法解析,或者报错找不到构造函数,那么是无解的。 这是任意一个依赖 java 反射机制解析库共同的问题。
临时解决方案是不要使用默认参数,或者给所有字段全部加上默认参数。
或者你可以加上 kotlin-reflect 依赖。(这个玩意 2.5M Android App 慎用)
永久的解决方案是切换到 Kotlin-First 的解析库,比如 Square 的 Moshi,或者 Kotlin 官方的序列化库。
@wenshao 举个栗子
class DomainInfo {
var id: Long? = null
var type: String? = null
var number: String? = null
var name: String? = null
var path: String? = null
constructor() {}
constructor(id: Long?, type: String?, number: String?, name: String?, path: String?) {
this.id = id
this.type = type
this.number = number
this.name = name
this.path = path
}
}
会报can not found default constructor的错误。
支持的,能提具体问题么?
调试了下,发现了报错原因,源码中 https://github.com/alibaba/fastjson/blob/f1e51f5cfa939f6dfc31899e5381e93d3604d1b7/src/main/java/com/alibaba/fastjson/util/TypeUtils.java#L120 "kotlin.reflect.jvm.internal.KClassImpl"已经找不到了
需要依赖kotlin-reflect
kotlin 字段为List<*>可空类型,当json返回null时非android版本fastjson可以正常解析,android版本会包set property error(均为最新版),可否将标准版功能迁移到android版本
安卓版本真鸡肋啊,更新慢,标准版可以解析的,android不行。。。
如果楼主的问题是 data class 默认值导致的无法解析,或者报错找不到构造函数,那么是无解的。 这是任意一个依赖 java 反射机制解析库共同的问题。
临时解决方案是不要使用默认参数,或者给所有字段全部加上默认参数。
或者你可以加上 kotlin-reflect 依赖。(这个玩意 2.5M Android App 慎用)
永久的解决方案是切换到 Kotlin-First 的解析库,比如 Square 的 Moshi,或者 Kotlin 官方的序列化库。
moshi 和 kotlinx.serialization 更推荐哪个?
moshi 和 kotlinx.serialization 更推荐哪个?
如果可预见有跨平台需求,用 KS。
否则如果是 Android 项目建议 Moshi,因为它对 java 兼容更好。如果你不是很在意 java,KS 对编译速度影响更小一点。
@famik 我自己目前在用 moshi