You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore是否会自动移除属性名称中的前缀"is"?

问题原因与解决方案

这不是Firestore的原生行为,而是你使用的kotlinx.serialization序列化库的默认规则——它会遵循JavaBean命名规范处理布尔类型字段:当字段以is开头时,序列化会自动移除is前缀,并将后续首字母转为小写,作为最终存储的键名,所以isRefund会被序列化为refund。

解决方法

最直接且可靠的方式是给目标字段添加@SerialName注解,强制指定序列化后的键名:

@Serializable
data class Transaction internal constructor(
  val projectId: String = "",
  val amount: Double = 0.0,
  val currency: String = "USD",
  @SerialName("isRefund") // 显式指定序列化后的键名
  val isRefund: Boolean = false,
) {
  @Serializable(with = InstantSerializer::class)
  val createdAt: Instant = Instant.now()

  companion object {
    fun new(
      projectId: String,
      amount: Double,
      currency: String,
      isRefund: Boolean
    ): Transaction {
      return Transaction(
        projectId = projectId,
        amount = amount,
        currency = currency,
        isRefund = isRefund
      )
    }
  }
}

这样无论序列化库的默认规则如何,isRefund字段都会以你指定的键名isRefund存储到Firestore中,完全符合预期。

另外,因为你的代码是作为库提供给消费者使用,显式指定@SerialName还能避免消费者因序列化配置不同导致的字段名不一致问题,保证兼容性。

内容的提问来源于stack exchange,提问作者Son Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:12:06