Я использую Google Gson для де / сериализации базы данных приложения в / из JSON. Приложение использует базу данных Room с пользовательским классом, который имеет более 20 полей, поэтому для простоты рассмотрим пример один. Я недавно изменил тип поля с String на JSON; Room отлично справился с миграцией - просто создав класс конвертера и добавив миграцию void версии, - но я не уверен, как исправить Gson.
Вот класс объекта, соответственно старый и новый :
Старый exClass. java
@Entity(tableName = "example_class")
public class exClass {
@PrimaryKey(autoGenerate = true)
public int uid;
@ColumnInfo(name = "name")
public String name;
@ColumnInfo(name = "json")
public String json;
}
Новый exClass. java
@Entity(tableName = "example_class")
@TypeConverters({Converters.class})
public class exClass {
@PrimaryKey(autoGenerate = true)
public int uid;
@ColumnInfo(name = "name")
public String name;
@ColumnInfo(name = "json")
public JSONObject json;
}
Теперь при попытке восстановить старые резервные копии базы данных (созданные со старой версия класса) Gson выдает исключение, потому что он ожидает объект JSON для поля "json", но находит строку.
Есть ли способ переопределить тип, который ожидает Gson, без необходимости создания пользовательского JsonSerializer<exClass>
?
Обратите внимание, что JSONObject все еще в порядке, что касается Room: конвертер преобразует " json "в строку, прежде чем вставлять ее в базу данных и наоборот, поэтому нужно только, чтобы Gson правильно проанализировал поле" json ".
Заранее спасибо