【问题标题】:Firestore exclude data serializationFirestore 排除数据序列化
【发布时间】:2018-04-17 06:18:50
【问题描述】:

我有几个不应该转移到 Firestore 的属性,例如元数据(“id”或“parent”),并且使用 Firebase 实时数据库,可以选择将它们设置为受保护并创建一个 getter使它们可供外界访问,但不能序列化到 Firebase。

使用 Firestore,防止属性序列化的唯一选择是创建一个具有私有属性的类并对其进行扩展。但这并不是真正有用,因为该属性甚至无法从类内部访问。

您能帮我找到一个解决方案来创建不序列化到 Firestore 的类属性吗? (也许是注释?)

非常感谢任何帮助!

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    要将字段标记为从 Firestore 或实时数据库中排除,您可以使用 @Exclude 注释。例如:

    @IgnoreExtraProperties
    public class Model {
        @Exclude private String id;
    
        // ...
    }
    

    您还可以对类使用 @IgnoreExtraProperties 注释来自动忽略未映射到类字段的属性。

    【讨论】:

    • 哇,知道有注释的方法,但遗憾的是没有记录在任何地方!
    • 请注意,@Exclude 注释来自 Firestore 或 RTDB 的不同包。 '@com.google.firebase.firestore.Exclude' 分别为 '@com.google.firebase.database.Exclude'
    • 这对我不起作用。显然,如果变量是private,注释对它不起作用。在这种情况下,请在 public getter 方法上添加 @Exclude
    • 对于 Firestore 使用 com.google.cloud.firestore.annotation.Exclude 导入,它对我有用。
    • 这对我不起作用。 @get:Exclude 的属性名称加上 @IgnoreExtraProperties 在类级别有效。我在 kotlin 中使用过这个。
    【解决方案2】:

    Grimthorr's answer 对我不起作用。因此,我将@Exclude 注释放在我想从写入Firestore db 中排除的字段的getter 方法之前,它起作用了:

    @Exclude
    public String getId() {
        return id;
    }
    

    【讨论】:

      【解决方案3】:

      对于 Kotlin,您需要确保 getter 使用 @Exclude 注释进行注释,而不仅仅是适当的字段。您可以通过指定注释的目标来做到这一点。例如:

      data class Model(@get:Exclude val id: String)
      

      @get 指定应将@Exclude 注释添加到值的getter。有关详细信息,请参阅 Annotation Use-site Targets 文档。

      这也适用于数据类。

      感谢@mfulton26 他的回答https://stackoverflow.com/a/40117301/2739794

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多