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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Kotlin 如何序列化实现gson接口的类?_Kotlin_Serialization_Gson - Fatal编程技术网

Kotlin 如何序列化实现gson接口的类?

Kotlin 如何序列化实现gson接口的类?,kotlin,serialization,gson,Kotlin,Serialization,Gson,有一个接口a: interface A { val name: String } 还有一个B类实现此接口: class B() : A { val implementedName: String = "Test" override val name: String get() = implementedName } 然后我尝试序列化这个类B: val b: A = B() Gson().toJson(b) 并geht以下输出:

有一个接口a:

interface A {
    val name: String
}
还有一个B类实现此接口:

class B() : A {
    val implementedName: String = "Test"

    override val name: String
        get() = implementedName
}
然后我尝试序列化这个类B:

val b: A = B()
Gson().toJson(b)
并geht以下输出:

// Output
{"implementedName":"Test"}
我意识到gson to type erasure无法推断变量b的类型,但我想看到的是gson序列化接口字段:

// Output
{"name":"Test"}

我怎样才能做到这一点呢?

Gson做不到。使用SerializedName注释Android Studio强调了这是不可能的。此批注不适用于没有支持字段或委托的目标成员属性。但以这种方式实施应该是可行的

interface A {
    val name: String
}

class B() : A {
    @SerializedName("your_name")
    override val name: String = "Test"
}
然后使用Gson().toJson(b),输出应为:

{"your_name": "Test"}

这不适用于我,因为我有不同的类实现接口A,而all应该能够实现名称字段,不管需要什么。但是当序列化时,它们的每个类都应该具有相同的json结构。@natschz你不能使用抽象类而不是接口吗?所以对我来说,它不是那么简单,它是一个更复杂的对象,也有嵌套对象,它们在实现接口时有相同的问题。我只是想知道是否真的有必要自己实现这个映射对象。这意味着要么自己完全映射对象,要么创建一个实现接口的其他类,然后将origina/实现的类映射到该接口。