gson Kotlin:姓名转录的冲突注解方案

9rbhqvlz  于 2022-11-06  发布在  Kotlin
关注(0)|答案(1)|浏览(159)

我从Firebase数据库中读取数据到Kotlin/Android程序中。Firebase中的键名与对应的Kotlin变量不同。我用平面JSON文件测试了这段代码(理由很充分),其中我保留了Firebase中使用的相同键名,所以我也需要转录它们。
Firebase想用@PropertyName注解变量;但是我用来读取平面文件Gson需要@SerializedName(不幸的是,Firebase不理解它)。
通过反复试验我发现,这恰好行得通:

@SerializedName("seq")
var id: Int? = null
    @PropertyName("seq")
    get
    @PropertyName("seq")
    set

Firebase和Gson都做了他们的事情,我的类得到了它的数据。我在这里是悬在一根细线上吗?有没有更好的方法来做到这一点?
谢谢您的评分

czfnxgou

czfnxgou1#

您可以通过使用Kotlin的@JvmField来抑制getter和setter的生成来解决这个问题。这将允许您直接在属性上放置@PropertyName注解。然后您可以实现一个Gson FieldNamingStrategy,它检查字段上是否存在@PropertyName注解,如果存在,则使用其值; FieldNamingStrategy必须在GsonBuilder上设置,然后用它来创建Gson示例。

相关问题