有没有一种反序列化json的方法?

sealed class Layer

data class ShapeLayer(var type: LayerType) : Layer
data class TextLayer(var type: LayerType) : Layer
data class ImageLayer(var type: LayerType) : Layer

LayerType is just some enum which can be used to distinguish which type should this object have.

我想我可以这样添加Adapter:

class LayerAdapter{
    @FromJson
    fun fromJson(layerJson: LayerJson): Layer {
        return when (layerJson.layerType) {
            LayerType.SHAPE -> PreCompLayer()
            LayerType.SOLID -> SolidLayer()
            LayerType.Text -> TextLayer()
        }
    }
}

Where LayerJson would be object which has every possible field of all LayerTypes.

Now the problem is:

无法序列化抽象类com.example.model.layers.Layer

I could try to use interface, but I don't think it would be correct to use empty interface in this.

推荐答案

It turned out that my code was actually correct from beginning!

Problem was with field declaration inside data Class:

data class LayerContainer(var/val layers: List<Layer>)

它适用于Val,但不适用于VAR! Kotlin 不知何故在下面创建了不同的代码. 这是我为模型的这一部分编写的最终代码:

@JvmSuppressWildcards var layers: List<Layer>

Kotlin相关问答推荐

来自SnapshotFlow的单元测试StateFlow仅发出initialValue

有什么原因,我得到一个空相关的错误在这个代码

访问者闭包中的Kotlin序列yield 率

Mockk:对同一函数进行两次存根会忽略第一个行为

Kotlin 中的 maxOf() 和 max() 方法有什么区别?

init中的NPE抽象函数变量

在 kotlin 中重载函数时,我在一些非常基本的代码上不断收到类型不匹配

正则表达式 FindAll 不打印结果 Kotlin

我什么时候可以在 LazyList 或 Column 的范围内使用 Composable?

为空数组添加值

Kotlin 从其他类调用成员扩展函数

如何从kotlin中的ArrayList中删除所有元素

具有多个不同类型来源的 LiveData

在粘贴时将 java 转换为 kotlin

保存对象时未填充 Spring Boot JPA@CreatedDate @LastModifiedDate

如何使用mockk库模拟android上下文

kotlin中密封类和密封接口的区别是什么

如何在kotlin用mockito模仿lambda

从 java 活动 *.java 启动 kotlin 活动 *.kt?

如何在 Kotlin 中按字母顺序对字符串进行排序