我试图序列化的firestore文档包含一个字符串映射图,如下所示:
我收藏的一些示例文档:
id: "someId1" (String)
vouchers (Map)
voucher_with_some_random_id_1 (Map)
name: "name 1"
description: "description 1"
voucher_with_some_random_id_2 (Map)
name: "name 2"
description: "description 2"
我在创建匹配的POJO类时遇到的问题是,内部映射的字段名不是恒定的,因为我的vouchers Map
中的凭证数量会不时变化。
对于具有未知自定义ID的documents
,有一个解决方案(注释@DocumentId
(
但我找不到适用于地图的注释。
我最近的失败尝试:
public class MyPOJO {
public MyPOJO() {
}
public String id;
public VouchersPOJO vouchers;
}
public class VouchersPOJO {
public VouchersPOJO() {
}
public List<ActualVoucherPOJO> vouchers;
}
public class ActualVoucherPOJO {
public ActualVoucherPOJO() {
}
public String name, description;
}
MyPOJO x = documentSnapshot.toObject(MyPOJO.class);
正如您已经说过的voucher
是Map
,所以这也是您应该在Java类中使用的:
public class MyPOJO {
public String id;
public Map<String,Voucher> vouchers;
}
public class Voucher {
public String name, description;
}
在这种情况下,我认为toObject()
不会处理整个数据结构。它不是用来处理动态/可变数据的。相反,您将不得不手动:
- 迭代从快照返回的Map of Maps的条目
- 将每个贴图转换为单个对象
- 使用您在地图中找到的内容组装最终的MyPOJO对象