我正在使用 Gson,并希望将以下 JSON 替代方案反序列化到同一类 Values
中。在后一种情况下,我想接收一个仅包含一个元素的 List
。有没有一种方法可以在 Gson 中完成此任务,而无需编写自定义反序列化器?
//Array:
{
"Value": [205.4, 13.5]
}
//Single value:
{
"Value": 205.4
}
将两者反序列化为:
public static class Values {
private List<Double> Value;
}
最佳答案
除非使用自定义 TypeAdapter
,否则在 Gson 中无法执行此操作.
public class AwesomeType extends ArrayList<Double> {
...
}
public class AwesomeTypeAdapter extends TypeAdapter<AwesomeType> {
@Override
public void write(JsonWriter out, AwesomeType value) throws IOException {
...
}
@Override
public AwesomeType read(JsonReader in) throws IOException {
AwesomeType result = new AwesomeType();
if (in.peek() == JsonToken.BEGIN_ARRAY) {
in.beginArray();
while (in.peek() != JsonToken.END_ARRAY)
result.add(in.nextDouble());
in.endArray();
} else {
result.add(in.nextDouble());
}
return result;
}
}
将此类型适配器注册到您的 Gson 并在您的模型中使用此类而不是 List<Double>
.
关于java - 反序列化一个值,可以是数组或原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42368530/