我从 OrientDB 服务器收到一些 JSON,看起来像这样:
{
...
"out": ...,
"in": ...,
...
}
现在这两个字段可以是以下两种类型之一:out
和我自己的自定义对象(我们称之为 a )。例如,对于一个请求,我可能会收到以下信息:in
String
Record
{
...
"out": "#17:0",
"in": {
...
},
...
}
对于另一个我可能会得到:
{
...
"out": {
...
},
"in": "#18:2",
...
}
等等。两者都可能是String
s,两者都可能是Records
,一个可能是 a String
,另一个是 a Record
,等等。现在,当我使用Moshi反序列化这种 JSON 时,我将有两个参数out
并in
保存它们各自键的值;但是,因为这些值不是固定的数据类型,所以说起来容易做起来难。
创建多个 POJO(或“POKO”,我猜,因为我使用的是 Kotlin)是行不通的,因为这些对象可以在其他JSON 对象和类似的东西中找到。我需要一个对象,这些参数可以采用可变数据类型。那我该怎么做呢?
我是否必须在 Moshi 中编写一个自定义适配器来序列化/反序列化这些值?如果是这样,我将如何编写一个可以根据参数值分配某种数据类型的程序?或者是否有某种我可以找到/编写的 Kotlin 类/函数/扩展函数可以容纳两种可能的数据类型?
如果它是相关的,我也使用 Retrofit 2 + RxJava 2 来使我的 HTTP 异步调用,所以如果这些库中有任何数据类型或函数可以促进这样的事情,我会全力以赴。
即使任何人都只能用 Java 回答也没关系,因为我可以自己转换代码。如果我遗漏了一些明显的东西,我会提前道歉。