9

I am trying to store a document in firestore in my android app using a custom object. If I am using proguard for building my app, is there a way to specify the serialized name for the fields inside my class like the way Gson provides using @SerializedName annotation?

Swapnil
  • 1,870
  • 2
  • 23
  • 48

1 Answers1

22

You can specify the name a Java property gets in the JSON of the document with the PropertyName annotation. For example:

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

If you use getters and setters (instead of using a public field as above), be sure to put the annotation on both getter and 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; }
}

This annotation is shared between Cloud Firestore and the older Firebase Realtime Database, so I recommend also checking out some of the previous questions about PropertyName, such as Naming convention with Firebase serialization/deserialization?.

Edric
  • 24,639
  • 13
  • 81
  • 91
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • What if I need the same functionality when saving data into firestore. My field name in java is called `xyzSomethings`. But I want it to be saved as `somethings`. Is there a way? – pvpkiran Apr 20 '20 at 09:31
  • The exact same annotation exists for Firestore: https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/PropertyName – Frank van Puffelen Apr 20 '20 at 15:15
  • Thanks for the reply. I tried this. This doesn't work. It works when reading value from firestore. not when saving data into firestore – pvpkiran Apr 20 '20 at 15:44
  • In that case, please open a new question with the [minimal, complete/standalone code with which anyone can reproduce the problem](http://stackoverflow.com/help/mcve). – Frank van Puffelen Apr 20 '20 at 15:52
  • 1
    The issue is `@PropertyName` on provate fields doesn't work. It works when putting the annotation on public getters and setters. This question has some info on it https://stackoverflow.com/questions/38681260/firebase-propertyname-doesnt-work. Thanks – pvpkiran Apr 20 '20 at 18:27