我从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都做了他们的事情,我的类得到了它的数据。我在这里是悬在一根细线上吗?有没有更好的方法来做到这一点?
谢谢您的评分
1条答案
按热度按时间czfnxgou1#
您可以通过使用Kotlin的
@JvmField
来抑制getter和setter的生成来解决这个问题。这将允许您直接在属性上放置@PropertyName
注解。然后您可以实现一个GsonFieldNamingStrategy
,它检查字段上是否存在@PropertyName
注解,如果存在,则使用其值;FieldNamingStrategy
必须在GsonBuilder
上设置,然后用它来创建Gson
示例。