【问题标题】:Firestore custom `toObject` deserializationFirestore 自定义 `toObject` 反序列化
【发布时间】:2018-01-28 14:26:09
【问题描述】:

我在一个 Android 项目中使用 Firestore。
我有一个 Transaction 模型,它有一个 org.threeten.bp.LocalDateTime date 字段。

当我试图通过调用 docRef.toObject(Transaction.classDocumentReference 反序列化为 Transaction 模型时,我收到以下错误:

java.lang.RuntimeException:无法反序列化对象。无法将 java.lang.String 类型的对象转换为 org.threeten.bp.LocalDateTime 类型(在字段“日期”中找到)

这是正常的,因为服务器将日期作为字符串返回。
是否可以使用自定义反序列化器?

我知道我可以放弃使用toObject 方法并编写自定义代码,但感觉很浪费,因为我只需要对单个字段进行自定义反序列化。
其余字段正确反序列化。

【问题讨论】:

  • 我相信日期/时间字段的兼容类型是 Java.util.Date。由于您使用的是 String(也兼容),因此也许可以对自定义类的日期相关字段使用 Getter/Setter 方法将 LocalDateTime 转换为 String ,反之亦然?
  • @KaranModi 这就是我最终要做的事情,但如果我能够在使用 toObject 方法时将转换应用于特定字段,则首选。

标签: android serialization google-cloud-firestore


【解决方案1】:

Firebase 数据库和 Cloud Firestore 无法将任意 Java 对象序列化到数据库中。您必须编写代码来选择您想要存储的属性。

如果您在编写此代码时遇到问题,请展示您尝试过的内容,我们可以看看。

请参阅(其中大部分用于实时数据库,但同样的逻辑适用于 Cloud Firestore):

【讨论】:

  • 嗨,我实际上是在询问反序列化,而不是序列化。这确实可以使用toObject 方法开箱即用,但是我找不到提供自定义反序列化逻辑的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多