kotlin - 如何用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)
并得到以下输出:
// Output
{"implementedName":"Test"}
我意识到用于类型擦除的 gson 无法推断变量 b 的类型,但我想看到的是 gson 序列化接口字段:
// Output
{"name":"Test"}
我怎样才能做到这一点?
解决方案
格森做不到。使用 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"}
推荐阅读
- javascript - 如何将代码修复为可以设置的时钟,使其工作?
- r - chol2inv(chol(x)) 和求解(x)
- flutter - 在图像上手动设置 firebaseStorageDownloadTokens 使用 Flutter 上传到 Firebase 存储
- powerbi - Power BI - 日期切片器不适用于合并查询
- css - 升级后 JSX 样式不适用于 Storybook
- winapi - WIN32:有没有办法让按钮图标(BM_SETIMAGE)出现在文字的右侧
- c# - 继承具有不同基类的多个类的通用功能
- css - 扩大 rmarkdown html 中代码的输出
- c++ - 在没有参数列表的情况下无效使用模板名称'boost::asio::strand'
- javascript - 如何将用户生成的 svg 上传到服务器?