fastjson android版本不维护了吗?

mzsu5hc0  于 2021-11-27  发布在  Java
关注(0)|答案(9)|浏览(476)

如题,安全性问题也就算了, 就当android不需要安全性了。但kotlin这东西其实安卓用得更多,和data class的兼容性不是应该android这里更需要重视吗?

nwwlzxa7

nwwlzxa71#

支持的,能提具体问题么?

mpgws1up

mpgws1up2#

如果楼主的问题是 data class 默认值导致的无法解析,或者报错找不到构造函数,那么是无解的。
这是任意一个依赖 java 反射机制解析库共同的问题。

临时解决方案是不要使用默认参数,或者给所有字段全部加上默认参数。

或者你可以加上 kotlin-reflect 依赖。(这个玩意 2.5M Android App 慎用)

永久的解决方案是切换到 Kotlin-First 的解析库,比如 Square 的 Moshi,或者 Kotlin 官方的序列化库

ckocjqey

ckocjqey3#

@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的错误。

a2mppw5e

a2mppw5e4#

调试了下,发现了报错原因,源码中
fastjson/src/main/java/com/alibaba/fastjson/util/TypeUtils.java

Line 120 in f1e51f5

| | Class class_kotlin_kclass =Class.forName("kotlin.reflect.jvm.internal.KClassImpl"); |

"kotlin.reflect.jvm.internal.KClassImpl"已经找不到了

rfbsl7qr

rfbsl7qr5#

需要依赖kotlin-reflect

ezykj2lf

ezykj2lf6#

kotlin 字段为List<*>可空类型,当json返回null时非android版本fastjson可以正常解析,android版本会包set property error(均为最新版),可否将标准版功能迁移到android版本

cedebl8k

cedebl8k7#

安卓版本真鸡肋啊,更新慢,标准版可以解析的,android不行。。。

emeijp43

emeijp438#

moshi 和 kotlinx.serialization 更推荐哪个?

xienkqul

xienkqul9#

如果可预见有跨平台需求,用 KS。

否则如果是 Android 项目建议 Moshi,因为它对 java 兼容更好。如果你不是很在意 java,KS 对编译速度影响更小一点。

@famik 我自己目前在用 moshi

相关问题