Десериализация с помощью Gson.fromJson () не игнорирует отсутствующие поля - PullRequest
1 голос
/ 21 марта 2019

Ошибка воспроизведения только после добавления нового свойства в этот класс.

public class FormDataModel {
    private String name;
    private String description;
    private int dbid;
    private String localStorageId;
    private boolean isEnabled = true;
    private boolean isDirty;
    private boolean needsUpdate;
    private boolean needsUpload;
    private FormLocation formLocation;
    private String modifiedDate;
    private String displayedId;
    private String version;
    private boolean syncWithWebservice = false;
    private List<WebserviceCallModel> calls = new ArrayList<>();
}

В текущей версии я добавил новое свойство (с именем ' вызывает ') к сериализуемому классу. Я храню список FormDataModel, хранящийся в SharedPreferences, сериализованный в виде строки.

При открытии приложения сериализованный и запутанный список:

{"a":"Form Port","b":"Form description","c":482,"d":"775c5a8a-93fc-4257-805d-447bb1da27e2","e":true,"f":false,"g":false,"h":false,"i":3,"j":"2019-03-05T09:21:21","k":"045","l":"001","m":true}]

Ошибка, которую я продолжаю получать, такова: java.lang.IllegalStateException: ожидалось BEGIN_ARRAY, но было BOOLEAN в строке 1 столбца 193 пути $ [0] .m

Насколько я могу судить, переменная 'syncWithWebservice' обфусцирована с 'm'. Я не могу понять, почему Gson ожидает массив, а не логическую переменную. Я повторяю, этот сбой произошел только после того, как я добавил свойство 'Call' в класс.

Я просто хочу проанализировать список и список вызовов init с пустым списком, если он не найден.

Код десериализации:

   Gson gson = new GsonBuilder().setPrettyPrinting().create();
   ArrayList<FormDataModel> formList = gson.fromJson(set, new TypeToken<List<FormDataModel>>() {}.getType());

где переменная 'set' - это сериализованный список в памяти, сохраненный в SharedPrefs.

Все остальные общие вопросы синтаксического анализа в SO не помогли, так как формат структуры списка действителен, и его сериализовали и десериализовали нормально перед добавлением нового свойства.

Спасибо.

...