firebase db: models con properties delegadas de Kotlin

Estoy usando objects de Kotlin para trabajar con mis models de database de Firebase, como se describe en la guía . Tengo muchos campos que están almacenados como cadenas, pero realmente son enumeraciones, así que para ser seguro tengo campos enum en los models, más una propiedad de cadena delegada que devuelve el valor almacenado de la base de fuego (como se sugirió en una pregunta le pedí algo de time) hace). Ahora, estos campos funcionan si obtengo / configuro la cadena delegada en el código, pero las bibliotecas de la database parecen omitirlas al convertir a / desde el formatting json de la database.

Un simple ejemplo:

abstract class BaseModel { @Exclude open var path: String? = null // fails even if I delete this field! } class Weight() : BaseModel() { constructor(v: Double, u: WeightUnit) : this() { value = v unitEnum = u } var value: Double = 0.0 @Exclude var unitEnum: WeightUnit = WeightUnit.KG var unit: String by EnumStringLowercaseConverter(WeightUnit::class.java).getDelegate(Weight::unitEnum) } [...] val testWeight = Weight(7.0, "kg") db.getReference("/valid/path/to/save/testWeight").setValue(testWeight) .addOnSuccessListener { r -> Log.d(LOG_TAG, "set successful") } .addOnFailureListener { e -> Log.e(LOG_TAG, "set error", e) } 

El setValue siempre da un error de Permission Denied , pero funciona, si unitEnum campo unitEnum y hago de la unit una propiedad de String normal.

Es similar para leer: Firebase no da errores al get un object Weight, pero el campo weightUnit nunca se configura en ninguna otra weightUnit que no sea la pnetworkingeterminada. Pero, si hago weight.unit = "lb" manualmente, el campo WeightUnit.LB devuelve WeightUnit.LB correctamente.

Estoy usando firebase libs v10.0.1

Ahora, las preguntas:

  • ¿Qué puedo hacer para que las properties delegadas funcionen correctamente con Firebase? Puedo probar un enfoque diferente para los campos enum delegates, siempre que los puntos de mi pregunta original estén satisfechos (código legible, conciso y seguro).
  • ¿Hay alguna forma de ver cómo exactamente las bibliotecas de bases de datos de fire convierten objects a / de json? ¿O al less ver al json convertido? Tal vez entonces podría modificar las cosas yo mismo. Desafortunadamente, todo lo relacionado con Firebase se muestra como /* compiled code */ en AndroidStudio.

ACTUALIZACIÓN : Por supuesto, podría agregar un método toMap() a cada model, donde buildía un map que contiene todas las properties necesarias en firebase, pero sería agotador hacer esto para cada model, y solo resuelve el problema del ahorro, los campos enum todavía no se establecerán al get.

Los accesorios delegates también se omiten al serializar con GSON. Entonces, ¿tal vez haya una forma genérica de hacer que las properties delegadas se vean como campos regulares?