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

Firebase实时数据库添加数据时遇“No properties to serialize found on class”错误

解决Firebase实时数据库序列化问题:字段首字母大写+No properties错误

嘿,我一眼就发现你代码里的问题啦!你遇到的两个问题——@PropertyName不生效和“No properties to serialize found on class”错误,根源都是同一个:你给每个字段的get和set方法都加了@Exclude注解。

错误原因解析

@get:Exclude和@set:Exclude的作用是告诉Firebase的序列化器忽略这个属性的读取和写入操作,相当于把这些字段完全从序列化流程中排除了。你把所有字段都加了这个注解,Firebase自然找不到任何可以序列化的属性,就会抛出“No properties to serialize found on class”错误;同时@PropertyName也因为属性被排除,完全没机会发挥作用。

正确的实现方式

如果你想让字段在Firebase数据库中以首字母大写的形式存储,只需要保留@PropertyName注解,去掉那些不必要的@get:Exclude和@set:Exclude就行。这里给你两种可行的写法:

写法一:直接标注字段(最简洁)

import com.google.firebase.database.PropertyName

class User(
    @PropertyName("FirstName") var firstName: String = "",
    @PropertyName("LastName") var lastName: String = "",
    @PropertyName("Email") var email: String = ""
    // 其他需要存储的字段同理
)

写法二:配合自定义Getter/Setter(如果需要额外逻辑)

如果你需要对字段的读写加额外逻辑,也可以把@PropertyName标注在Getter或Setter上,同时确保不要加@Exclude:

import com.google.firebase.database.PropertyName

class User {
    private var _firstName: String = ""

    @PropertyName("FirstName")
    fun getFirstName(): String {
        return _firstName
    }

    @PropertyName("FirstName")
    fun setFirstName(value: String) {
        _firstName = value
    }

    // lastName和email同理
}

额外提醒

如果你的类里有不需要存储到数据库的临时字段,再给那个字段的get或set加@Exclude,比如:

class User(
    @PropertyName("FirstName") var firstName: String = "",
    // 这个临时字段不需要存到数据库
    @get:Exclude var tempToken: String = ""
)

这样修改后,Firebase就能正确识别你的属性,并且按照@PropertyName指定的首字母大写字段名存储数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:42