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