Firebase Firestore是否有@SerializedName等效方案?属性名变更问题咨询
关于Firestore Kotlin数据类字段命名与映射的问题
这是个非常常见的Firebase使用问题,我来一步步给你解答:
1. 「isEnabled字段被自动保存为enabled」是否正常?
这完全是正常现象,背后的原因是Firebase的序列化机制遵循了JavaBean的命名规范:
- 对于布尔类型的属性,如果名称以
is开头,序列化器会自动移除前缀is,并将后续的首字母转为小写(比如这里的isEnabled就变成了enabled)。 - 这个规则是为了和Java生态的getter/setter命名习惯对齐(布尔属性的getter通常是
isEnabled()而非getIsEnabled()),所以Firestore的默认序列化逻辑会做这样的转换。
2. Firestore是否有类似@SerializedName的字段映射注解?
有的!Firebase提供了@PropertyName注解,专门用来指定属性与Firestore字段的映射关系,用法和Gson的@SerializedName非常相似。
你只需要给目标字段添加这个注解,指定想要在Firestore中存储的字段名即可,修改后的示例代码如下(顺便纠正了Kotlin布尔类型的写法,应该是Boolean而非Bool):
import com.google.firebase.firestore.PropertyName data class ExampleClass( val id: String, val foo: String, val bar: String, @PropertyName("isEnabled") val isEnabled: Boolean )
这样当你把ExampleClass对象存入Firestore时,这个字段就会以isEnabled的名称保存,而不是被自动转为enabled。另外要注意:这个注解在读取Firestore数据映射回数据类时同样生效,Firestore会根据注解指定的字段名匹配赋值,不需要额外配置。
内容的提问来源于stack exchange,提问作者Valentin
相关产品推荐
相关产品推荐

