如何用gson序列化一个实现接口的类?

axkjgtzd  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(211)

有一个接口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)

并得到以下输出:

// Output
{"implementedName":"Test"}

我意识到gson的类型擦除不能推断变量b的类型,但我想看到的是gson序列化接口字段:

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

我怎样才能做到这一点?

bfhwhh0e

bfhwhh0e1#

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"}

相关问题