这是一个具体的问题,我无法在Gson的javadoc中获得有关此主题的任何信息。
目前,我正在尝试将Json(1)db.doc(`users/${userId}`)
.get()
.then(snapshot => {
// ...
});
解析为对象{ "foo":"bar", "bar":"foo" }
。通常我会将这些值映射到Entity
对象,其中包含Entity
和foo
字段,但我希望从API中获得更多独立 。
对于(1)我有
bar
但是如果我们测试另一个端点,结果Json(2)看起来像
public class Entity {
String foo;
String bar;
}
这使我之前构建的{ "notFoo":"bar", "notBar":"foo" }
无用,我需要创建一个新的类,其中包含相应的字段。
所以我的实际问题是:
是否有泛型(比我的示例更通用)方法
将Json推入Entity
- > GenericEntity
即使使用不同的端点,json的每个字段都会成功映射?
或者,还有其他依赖项支持开箱即用吗?
答案 0 :(得分:0)
您可以使用Multiple GSON @SerializedName per field?中所写的注释@serializedName
。但架构必须相同,您只能选择键名。
答案 1 :(得分:0)
您没有反序列化问题,您有一个不知道如何表示可能异构数据的问题。
没有必要说它应该是Object
因为它应该是Object
下游的某种类型,可能不止一个。首先解决这个问题:定义您可能想要用于所有用例的所有类型,然后您很可能会看到如何解决反序列化问题。
当然,对于在{...}
之间定义的任何JSON文本,您始终可以使用Map<String, Object>
,其中Object
是其中之一:
Map<String, Object>
其中Object
遵循这些规则List<Object>
其中Object
遵循这些规则String
根据上述规则,您可以表示或多或少的所有内容,您可以编写Gson
反序列化器,根据每个节点的JSON类型(通过JSON树进行迭代)为您提供这些类型。但是,对于这种异构的无类型数据结构,您是否可以使用它并不是很清楚。