在 java 类中为 firestore 文档指定序列化名称

Posted

技术标签:

【中文标题】在 java 类中为 firestore 文档指定序列化名称【英文标题】:Specifying serialized names in java class for firestore document 【发布时间】:2018-12-27 07:15:02 【问题描述】:

我正在尝试使用custom object 将document 存储在我的android 应用程序的firestore 中。如果我使用 proguard 来构建我的应用程序,有没有办法像 Gson 使用 @SerializedName 注释提供的那样为我的类中的字段指定序列化名称?

【问题讨论】:

【参考方案1】:

您可以使用PropertyName 注释指定Java 属性在文档的JSON 中获取的名称。例如:

public class Data 
    @PropertyName("some_field_name")
    public String someFieldName;

如果您使用 getter 和 setter(而不是像上面那样使用公共字段),请务必将注解放在 getter 和 setter 上:

public class Data 
    private String someFieldName;

    @PropertyName("some_field_name")
    public String getSomeFieldName()  return someFieldName; 

    @PropertyName("some_field_name")
    public void setSomeFieldName(String someFieldName)  this.someFieldName = someFieldName; 

此注释在 Cloud Firestore 和旧版 Firebase 实时数据库之间共享,因此我建议您同时查看一些 previous questions about PropertyName,例如 Naming convention with Firebase serialization/deserialization?。

【讨论】:

如果我在将数据保存到 Firestore 时需要相同的功能怎么办。我在 java 中的字段名称称为xyzSomethings。但我希望它保存为somethings。有办法吗? Firestore 存在完全相同的注释:firebase.google.com/docs/reference/android/com/google/firebase/… 感谢您的回复。我试过这个。这行不通。它在从 Firestore 读取值时起作用。将数据保存到 Firestore 时不会 在这种情况下,请使用minimal, complete/standalone code with which anyone can reproduce the problem 提出一个新问题。 问题是 @PropertyName 在 provate 字段上不起作用。它在将注释放在公共 getter 和 setter 上时起作用。这个问题有一些关于它的信息***.com/questions/38681260/…。谢谢

以上是关于在 java 类中为 firestore 文档指定序列化名称的主要内容,如果未能解决你的问题,请参考以下文章

文档字段的 Firestore 规则

在 Google BigQuery 中插入/更新 Firestore 文档导出

在具有ID的Firestore中查找特定字段

如何在firebase-flutter中为快照数据指定字段[重复]

iOS - Firestore 复合索引中的索引上的多个 orderBy 和 where 子句

Firestore - 对文档使用更新方法,但使用对象(Java)