Я пытаюсь сохранить enum-класс в Room db. Мой класс:
enum class TestClass(val firstField: String, secondField: Long) {
FIRST("test", 1L),
SECOND("test_2", 2L),
THIRD("test_3", 3L)
}
Мои TypeConverters:
@TypeConverter
fun jsonToTestClassList(json: String) = Gson().fromJson<MutableSet<TestClass>>(json)
@TypeConverter
fun testClassToJson(testClassSet: MutableSet<TestClass>?) = Gson().toJson(testClassSet)
Когда я сохраняю его в комнату, он показывает только перечисления, а не конструкторы перечисления. Например, если список имеет 2 перечисления, он сохраняется как
["FIRST", "SECOND"]
Как мне добиться сериализации и десериализации, чтобы сохранить параметры конструктора, например,
[{FIRST, "test", 1L}, {SECOND, "test_2", 2L}]
Или что-то подобное, чтобы получить Параметры конструктора Назад.
ОБНОВЛЕНИЕ:
Я понял это; Я только что создал новый класс, и в TypeConverter я преобразовал свое перечисление в класс, новый класс, который я только что создал.
@TypeConverter
fun jsonToTestClassList(json: String): MutableSet<TestClass>? {
return Gson().fromJson<List<TestClassDatabase>?>(json)?.map {
it.testClass.apply {
firstField = it.firstField
}
}?.toMutableSet()
}
@TypeConverter
fun testClassToJson(testClassList: MutableSet<TestClass>?): String {
return Gson().toJson(testClassList?.run {
mutableListOf<TestClassDatabase>().apply {
addAll(testClassList.map {
TestClassDatabase(it, it.firstField)
})
}
})
}
Не мой гордый код, но вы поняли.