数据类:
data class Person(var name: String, var age: Int, var desc: String)
JSON:
json = {"age":99,"name":"robohorse"}
测试:
@Test
fun testFastJson() {
val person = JSON.parseObject(json, Person::class.java)
Assert.assertEquals(99, person.age)
}
@Test
fun gson() {
val person = Gson().fromJson(json, Person::class.java)
Assert.assertEquals(99, person.age)
}
运行,用例testFastJson报异常:com.alibaba.fastjson.JSONException: create instance error
如果Person是Java写的,就没错
环境:
Android Studio Canary 3.0 Beta6
kotlin_version = '1.1.4-3'
"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
"org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
com.alibaba:fastjson:1.2.38 or com.alibaba:fastjson:1.1.63.android
这个问题是因为desc缺失导致的,如下这样,加上desc就对了
json = `{"age":99,"name":"robohorse","desc":"xxx"}`
谢谢提醒
但我的意思是,如果实体类是Java写的,就算没有desc,也会默认desc是null且不会报错,那么Kotlin写的数据类也应该是这样,但事实是会报异常。
如果这不是BUG,我将关闭此issuse
data class Person(var name: String?, var age: Int?, var desc: String?)
加上问号就可以了
Most helpful comment
data class Person(var name: String?, var age: Int?, var desc: String?)
加上问号就可以了