我正在使用Gsson
来转换JSON to Kotlin data class
。创建数据类对象时,我想解析init
方法中的值。但是init
从未调用过,并且生成的对象的值为null。
data class Configuration (val groupId:Int, val key:String, val source:String){
val query:String
val search:String
init {
val obj = JSONObject(key)
query = obj.getString("q")
search = obj.getString("search")
}
}
当我从Gson
获得Configuration对象时,query
和search
的值始终为null
,并且从未执行过init
块。我还尝试了constructor
,但没有data
关键字,结果是相同的。
答案 0 :(得分:2)
init
块仅在调用主构造函数时执行。但是gson
在将json解析为对象时不会调用主构造函数。
我认为,要解决此问题,您应该将query
和search
实现为get方法或使用惰性初始化。像这样:
data class Configuration(val groupId: Int, val key: String, val source: String) {
var query: String = ""
get() {
if (field == null) {
initInternal()
}
return field
}
private set
var search: String? = null
get() {
if (field == null) {
initInternal()
}
return field
}
private set
private fun initInternal() {
val obj = JSONObject(key)
query = obj.getString("q")
search = obj.getString("search")
}
}
或其他最适合您要求的方法。