- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字段,我想根据该 Json 对象上的值将其反序列化为密封子类的实例。
[
{
"id": 1L,
"some_array": [],
"my_thing": {
"type": "sealed_subclass_one",
"other_thing": {
"thing": "thing is a string"
}
}
}, {
"id": 2L,
"some_array": [],
"my_thing": {
"type": "sealed_subclass_two",
"other_thing": {
"other_thing": "other_thing is a string too"
}
}
},
]
响应模型:
@Serializable
data class MyResponse(
@SerialName("id")
val id: Long
@SerialName("some_array")
val someArray: Array<Something>
@SerialName("my_thing")
val myThing: MySealedClassResponse
)
我的密封类
@Serializable
sealed class MySealedClassResponse : Parcelable {
@Serializable
@SerialName("type")
data class SealedSubclassOne(
val thing: String
) : MySealedClassResponse()
@Serializable
@SerialName("type")
data class SealedSubclassTwo(
val otherThing: String
) : MySealedClassResponse()
}
就目前而言,我遇到了一个序列化异常,因为序列化程序不知道该怎么做:
kotlinx.serialization.SerializationException:sealed_subclass_one 未在类 com.myapp.MyResponse 的范围内注册多态序列化
是否有一种简单的方法来注册 type
的值,以便在没有自定义序列化程序的情况下进行反序列化?
最佳答案
我相信如果您将 @SerialName("type")
更改为 @SerialName("sealed_subclass_one")
(对于 SealedSubclassTwo
也是如此声明)它应该能够找到正确的序列化程序。
sealed 子类型上的 SerialName
属性是为了将 json 的 type
属性与适当的子类(因此适当的序列化器实例)。
参见 https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#a-bit-of-customizing更多细节。但该文档的相关部分是:
By default, encoded type name is equal to class' fully-qualified name. To change that, you can annotate the class with @SerialName annotation
关于kotlin - 根据字段值反序列化为密封子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743124/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!