android - Firebase 序列化/反序列化的命名约定?

标签 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() {...}
}

Firebase 中的预期结果应该是:

{
    "some_field_name" : "...",
    "another_field_name" : "..."
}

使用 Gson 我可以使用 FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES 来实现我的目的,如 Gson 文档中所示:

Here's a few examples of the form "Java Field Name" ---> "JSON Field Name":

  • someFieldName ---> some_field_name

  • _someFieldName ---> _some_field_name

  • aStringField ---> a_string_field

  • aURL ---> a_u_r_l


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

谢谢!

最佳答案

当从 Firebase 数据库中读回数据时,您可以使用 @PropertyName 注解来标记一个字段,以便在序列化/反序列化时重命名,如下所示:

@IgnoreExtraProperties
class Data {
    @PropertyName("some_field_name")
    public String someFieldName
    @PropertyName("another_field_name")
    private String anotherFieldName;
    public Data() {}
}

确保您的字段是公共(public)的而不是私有(private)的,否则注释将不起作用(我也相信 Firebase 使用 Jackson 来处理引擎盖下的对象映射,但不要认为您实际上可以自定义它的使用方式).

关于android - Firebase 序列化/反序列化的命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40690641/

相关文章:

java - 让 Twilio 监听来自设备启动的来电

android - 在 eclipse 中停止进程

json - Flutter (Dart) 遍历 JSON 结果 - .length 返回 0

ios - 使用 Firebase 和 GeoFire 通过 Radius 检索位置数据

ios - Firebase 从异步调用返回 bool 值

java - Android Flash 与 Java

objective-c - 获取JSON字典中的所有值,而无需按键访问

javascript - SyntaxError : JSON. 解析:React 应用程序上 JSON 数据的第 1 行第 1 列出现意外字符

ios - Firebase 数据结构和过滤

java - getActivity().findViewById(int id) 即使在 fragment 完成构建后也会返回 null