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

Firebase doTransaction设置数据类值时成员名称出现后缀的原因

Firebase数据类成员带后缀的原因及解决办法

问题原因

  • Kotlin UInt类型序列化不兼容:Firebase Realtime Database默认用Gson做序列化,而Gson没有内置支持Kotlin的无符号整数类型UInt。序列化UInt时,Gson会把它当作复杂对象处理,拆解出内部结构字段,最终在控制台显示出类似-pVg5ArA的后缀(这是Gson对对象内部成员的标识)。
  • 缺少自定义序列化配置:如果没给UInt类型配置专门的序列化规则,Firebase会沿用默认逻辑,导致UInt字段被错误序列化,产生额外后缀。

解决办法

方案一:改用Int类型(推荐)

如果业务场景允许,直接把数据类里的UInt换成Int,Firebase能直接正确序列化数值,避免额外后缀:

data class PokerTableMsg(
    val turnIndex: Int = 0,
    val userState: Int = UserState.INVALID.value.toInt(),
    val minRaise: Int = 0
)

方案二:配置自定义Gson序列化器

若必须保留UInt类型,可自定义Gson的UInt序列化适配器,让Firebase正确处理无符号整数:

// 实现UInt的Gson类型适配器
class UIntTypeAdapter : TypeAdapter<UInt>() {
    override fun write(out: JsonWriter, value: UInt?) {
        out.value(value?.toLong())
    }

    override fun read(`in`: JsonReader): UInt {
        return `in`.nextLong().toUInt()
    }
}

// 在Firebase初始化时配置自定义Gson
val customGson = GsonBuilder()
    .registerTypeAdapter(UInt::class.java, UIntTypeAdapter())
    .create()

// 应用自定义Gson到Firebase Realtime Database
Firebase.database.gson = customGson

内容的提问来源于stack exchange,提问作者Guy Sadoun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:55:59