Десериализация объекта json, который не всегда одного типа - PullRequest
0 голосов
/ 27 сентября 2019

Я десериализую объект json в класс с помощью Gson.fromJson ().Все работает хорошо, за исключением одного поля, которое доставляет мне неприятности.Это поле отображается как логическое и как поле с подполями в json.Я понятия не имею, что делать с моим контейнерным классом, потому что создание внутреннего класса генерирует ошибку, когда поле отображается как логическое и наоборот.Вот пример того, как поле может выглядеть:

Либо: "licenses":false

Или: "licenses":{"models":["LicenseName1"]}}

Для меня проще всего было бы использовать полебыть нулевым, когда он отображается как «false».

Пример кода для класса, используемого для хранения данных json:

public class Test

{

    private License licenses //Or boolean licenses? Depends what's in the json...
    //More parameters...

    //Inner class
    public class License
    {
        String[] models;
    }
}

1 Ответ

0 голосов
/ 27 сентября 2019

По умолчанию Gson всегда создает пустой экземпляр модели Java, а затем задает свойства с помощью отражения.Таким образом, лучший подход, который я бы сказал, это объявить это поле как JsonElement, потому что есть несколько методов, которые вы можете легко найти, это логическое значение или JsonObject

JsonElement

public boolean isJsonObject()

обеспечивает проверку для проверки, является ли этот элемент объектом Json или нет.

public boolean isJsonPrimitive()

обеспечивает проверку для проверки, является ли этот элемент примитивнымили нет.

Тест

public class Test {

private JsonElement licenses 

public class License {
    String[] models;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...