Kotlin 如何序列化实现gson接口的类?
有一个接口a: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以下输出:
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/实现的类映射到该接口。