Я работаю с устаревшей системой, которая может иметь JSON, которые могут либо выглядеть:значение Deserialize, которое может быть целым или строкой
{"gauge": 1.0}
// or
{"gauge": "1.0-2.0"}
который должен сказать, что gauge
может быть либо целым числом или строкой , Я хочу иметь возможность сериализовать и десериализовать значение для одного и того же типа.
Сначала я думал, что я мог бы просто создать адаптер для этого:
public class Capabilities {
private Range gauge;
}
public class Range {
private int value;
private String range;
private boolean isRange;
public Range(int value) {
this.value = value;
this.isRange = false;
}
public Range(String value) {
this.range = range;
this.isRange = true;
}
public boolean isRange() {
return this.isRange;
}
public int getValue() {
return this.value;
}
public String getRange() {
return this.range;
}
}
Тогда я RangeTypeAdapter
, что создает Range
с Int значения/String в зависимости от обстоятельств.
Однако, когда я бегу gson.fromJson(str, Capabilities.class)
я получаю:
Expected BEGIN_OBJECT but was STRING
Я убедился, что это происходит потому, что значение gauge
в str
является завернутые в двойных кавычках, и тот факт, что gauge
должен быть Range
или ничего, кроме String
, означает, что он ожидает, что он станет объектом.
Есть ли способ ожидать, что Gson ожидает STRING
для определенного класса? Более того, есть ли лучший способ обработки возможной дисперсии в примитивном типе?
У вас есть доступ и контроль над классом исходного кода bean (POJO)? если да, я могу предложить ответ с помощью 'gauge' getter – Yazan
@Yazan Я не слишком хорошо знаком с Java и честно не знаю, что означает« исходный код класса POJO », но я создал« Возможности »,« Диапазон » ',' RangeTypeAdapter' и класс, который выполняет 'gson.fromJson' –
bean или POJO Я имею в виду класс, который будет использоваться для сериализации или десериализации JSON (используя GSON), в любом случае я отправляю ответ :) надеюсь, что это поможет вам – Yazan