Firestore - 如何在 Kotlin 中排除数据类对象的字段

Posted

技术标签:

【中文标题】Firestore - 如何在 Kotlin 中排除数据类对象的字段【英文标题】:Firestore - how to exclude fields of data class objects in Kotlin 【发布时间】:2018-08-19 19:32:45 【问题描述】:

Firestore 在这里解释,我如何使用简单的类来直接将它们与 Firestore 一起使用:https://firebase.google.com/docs/firestore/manage-data/add-data

如何将字段标记为排除?

data class Parent(var name: String? = null) 
    // don't save this field directly
    var questions: ArrayList<String> = ArrayList()

【问题讨论】:

这里有两个不同的问题。一种是使用 Firestore 将 Kotlin 字段排除在序列化之外。另一个是关于序列化引用类型字段。它们之间并没有真正的关系。为了让有一个另一个问题的人更容易搜索到这个问题,我编辑了这个问题以仅解决从序列化中排除 Kotlin 字段的问题。关于引用类型的问题我在这里作为一个单独的问题回答:***.com/questions/49225103/… 【参考方案1】:

我意识到这已经很晚了,但我只是偶然发现了这一点,并认为我可以提供一种替代语法,希望有人会觉得它有帮助。

data class Parent(var name: String? = null) 
    @get:Exclude
    var questions: ArrayList<Child> = ArrayList()

这样做的一个好处是,在我看来,它读起来更清晰一些,但主要好处是它还允许排除数据类构造函数中定义的属性:

data class Parent(
    var name: String? = null,
    @get:Exclude
    var questions: ArrayList<Child> = ArrayList()
)

【讨论】:

【参考方案2】:

由于 Kotlin 为字段创建了隐式 getter 和 setter,因此您需要使用 @Exclude 注释 setter 以告诉 Firestore 不要使用它们。 Kotlin 的语法如下:

data class Parent(var name: String? = null) 
    // questions will not be serialized in either direction.
    var questions: ArrayList<Child> = ArrayList()
        @Exclude get

【讨论】:

你不是在你的例子中注释了吸气剂吗?为什么你说 setter 需要注解?

以上是关于Firestore - 如何在 Kotlin 中排除数据类对象的字段的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin - 如何执行 onCompleteListener 从 Firestore 获取数据?

如何使用kotlin滑动删除存储在firestore中的recyclerview项目?

如何从 kotlin 中的 firestore 读取映射数据

如何使用 kotlin 数据类获取 Firestore 文档的文档 ID

如何从 Firestore 中读取使用 Kotlin 中的 hashMap 添加的文档?

如何使用 Kotlin 更深入的属性查询 Firestore 集合? [复制]