Json 在数据库室中保存多态性(抽象类)的最佳实践

Json 在数据库室中保存多态性(抽象类)的最佳实践,json,type-conversion,polymorphism,android-room,abstract-class,Json,Type Conversion,Polymorphism,Android Room,Abstract Class,我有一个抽象类,它有很多孩子,他们想把抽象类保存在房间的桌子上 @ColumnInfo(name = "raw_amount") val rawAmount: RawAmount, 寻找最佳实践的typeConvertor。现在,我添加了带有value和save-as-String的类名,然后还添加了read-extract-class-type和value val rawAmountClassNameSeperatorChar = "#" @Type

我有一个抽象类,它有很多孩子,他们想把抽象类保存在房间的桌子上

@ColumnInfo(name = "raw_amount") val rawAmount: RawAmount,
寻找最佳实践的typeConvertor。现在,我添加了带有value和save-as-String的类名,然后还添加了read-extract-class-type和value

val rawAmountClassNameSeperatorChar = "#"

@TypeConverter
fun writeRawAmounts(value: RawAmount): String {
    val result =
    value::class.java.simpleName + rawAmountClassNameSeperatorChar + value.toString()
   return result
}
以及阅读:

   @TypeConverter
    fun readRawAmounts(value: String): RawAmount {

    val className = value.substringBefore(rawAmountClassNameSeperatorChar)
    val rawAmountValue = value.substringAfter(rawAmountClassNameSeperatorChar)

    val rawAmount = when (className) {
        Child1::class.java.simpleName -> {
          Child1(rawAmountValue)
        }
        Child2::class.java.simpleName -> {
           Child2(rawAmountValue)

        }
        else -> {
           Child2(rawAmountValue)

        }
    }
    return rawAmount
}
它工作得很好,因为我也用它保存类型,而且在sql查询中,由于类型转换,它工作得很好。唯一的问题是我在DB中添加了一些东西,DB字段格式不是任何全球标准,而是我自己的标准
classname\value

我正在寻找更好的练习。我们知道json总是需要一个转换类型,保存时我们知道该类型并可以准备

@TypeConverter
fun writeRawAmounts(value: RawAmount): String {

    val type = if(value is Child1){
        object : TypeToken<Child1>() {}.type
    }else{
        object : TypeToken<Child2>() {}.type
    }

    return Gson().toJson(value, type)
}
@TypeConverter
有趣的WriterWamounts(值:RawAmount):字符串{
val type=if(值为Child1){
对象:TypeToken(){}.type
}否则{
对象:TypeToken(){}.type
}
返回Gson().toJson(值,类型)
}
但对于阅读,我们会有问题。我还尝试为我的多态性类提供一个定制的gson解析器,但无法实现goo解析器。 所以期待知道更好的解决方案