Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 向Kotlin中的列表添加静态和实例方法_Json_Kotlin_Klaxon - Fatal编程技术网

Json 向Kotlin中的列表添加静态和实例方法

Json 向Kotlin中的列表添加静态和实例方法,json,kotlin,klaxon,Json,Kotlin,Klaxon,我正在尝试添加到quicktype,以便Kotlin开发人员可以轻松地从JSON生成Kotlin中的类型和封送代码 对于任何给定的JSON示例,我都希望使用T.fromJson静态方法和T.toJson实例方法生成一个类型T,但当顶级类型不是对象时,我就卡住了。例如,给定JSON [ { "name": "David" } ] quicktype sample.json-t People-l kotlin产生: // To parse the JSON, add this file to

我正在尝试添加到quicktype,以便Kotlin开发人员可以轻松地从JSON生成Kotlin中的类型和封送代码

对于任何给定的JSON示例,我都希望使用
T.fromJson
静态方法和
T.toJson
实例方法生成一个类型
T
,但当顶级类型不是对象时,我就卡住了。例如,给定JSON

[
  { "name": "David" }
]
quicktype sample.json-t People-l kotlin
产生:

// To parse the JSON, add this file to your project and do:
//
//   val people = People.fromJson(jsonString)

import com.beust.klaxon.*

private val klaxon =
    Klaxon()

typealias People = List<Person>

data class Person (
    val name: String
) {
    public fun toJson() = klaxon.toJsonString(this as Any)

    companion object {
        public fun fromJson(json: String) = klaxon.parse<Person>(json)
    }
}
但我无法编写
开放类人物
,因此我删除了别名:

open class List<Person> {
    public fun toJson() = klaxon.toJsonString(this as Any)

    companion object {
        public fun fromJson(json: String) = klaxon.parseArray<Person>(json)
    }
}
打开类列表{
public-fun-toJson()=klaxon.toJsonString(如有)
伴星{
public fun fromJson(json:String)=klaxon.parseArray(json)
}
}
但是现在
people.toJson()
没有编译,因为编译器找不到方法

我可以在Kotlin中实现我想要的语义吗?

您可以使用

class People : List<Person>()
class人员:列表()
然而,就我个人而言,我会使用以下通用顶级功能进行简化:

fun <T> T.toJson() = Klaxon().toJsonString(this as Any)
fun <T> fromJson(json: String) = Klaxon().parse<T>(json)
fun <T> fromJsonArray(json: String) = Klaxon().parseArray<T>(json)
fun T.toJson()=Klaxon().toJsonString(如有)
fun fromJson(json:String)=Klaxon().parse(json)
fun fromJsonArray(json:String)=Klaxon().parseArray(json)

这些都是很好的建议,谢谢!我的目标是从Json调用所有
Json->T
函数。我可以用这些顶级定义来完成这一点吗?我最终为我想要的语义子类化了
ArrayList
。很好用!
fun <T> T.toJson() = Klaxon().toJsonString(this as Any)
fun <T> fromJson(json: String) = Klaxon().parse<T>(json)
fun <T> fromJsonArray(json: String) = Klaxon().parseArray<T>(json)