使用Firebase序列化/反序列化命名约定?

Kha*_*.NT 8 android json firebase firebase-realtime-database

我想知道Firebase如何将POJO对象序列化/反序列化为json,是否使用Jackson或Gson或其他类似的库.
我在使用Firebase 命名约定方面遇到了麻烦.我的模特有点像这样:

class Data {
    private String someFieldName;
    private String anotherFieldName;
    public Data() {}
    public void setSomeFieldName(String) {...}
    public String getSomeFieldName(String) {...}
    public void setAnotherFieldName(String) {...}
    public String getAnotherFieldName() {...}
}
Run Code Online (Sandbox Code Playgroud)

Firebase中的预期结果应为:

{
    "some_field_name" : "...",
    "another_field_name" : "..."
}
Run Code Online (Sandbox Code Playgroud)

Gson我可以FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES用于我的目的,如在Gson doc中:

以下是"Java字段名称"--->"JSON字段名称"形式的几个示例:

  • someFieldName ---> some_field_name
  • _someFieldName ---> _some_field_name

  • aStringField ---> a_string_field

  • aURL ---> a_u_r_l

如何将我的POJO对象转换为具有特定命名约定的"Firebase值",反之亦然,或者有什么方法可以自定义序列化/反序列化过程?

谢谢!

cry*_*son 19

从Firebase数据库读取数据时,您可以使用@PropertyName注释标记要在序列化/反序列化时重命名的字段,如下所示:

@IgnoreExtraProperties
class Data {
    @PropertyName("some_field_name")
    public String someFieldName
    @PropertyName("another_field_name")
    private String anotherFieldName;
    public Data() {}
}
Run Code Online (Sandbox Code Playgroud)

确保你的字段是公共的而不是私有的,否则注释将不起作用(我也相信Firebase使用Jackson处理引擎盖下的对象映射,但不认为你可以实际定制它如何使用它).