android - Kotlin 多态序列化(字符串数组和对象数组)
问题描述
我有一个服务器响应,它可以返回一个字符串数组或一个对象数组,但我不知道如何定义这种多态关系。这是序列化程序的 Kotlin 代码。该类sentence
需要是一个普通数组,但序列化程序需要一个val
键。
@Serializable
data class QuizResponse(
val name: String,
val quiz: List<Quiz>
)
@Serializable
data class Quiz(
val id: Int,
val question: String,
val quiz_type: String,
val video: BasicVideo,
val answers: List<Answer>
)
@Polymorphic
@Serializable
sealed class Answer {
@Serializable
data class Sentence(val answer: List<String>) : Answer()
@Serializable
data class Choice(val answer: String, val id: Int, val is_correct: Boolean) : Answer()
}
这是两个示例响应:
{
"name":"STRING",
"quiz":[
{
"id":123,
"video":{
"id":12,
"name":"ABC"
},
"question": "Question text",
"answers": ["a","b","c","d","e","f"],
"quiz_type":"sentence"
}
]
}
{
"name":"STRING",
"quiz":[
{
"id":123,
"video":{
"id":12,
"name":"ABC"
},
"question": "Question text",
"answers": [
{
"id": 12,
"text": "abc",
"is_correct": false,
},
{
"id": 13,
"text": "abc",
"is_correct": true,
},
],
"quiz_type":"choice"
}
]
}
键可以是answers
字符串数组或对象数组。这取决于quiz_type
密钥。
为这些数据创建自定义序列化程序的正确方法是什么?
解决方案
推荐阅读
- swift - 在 iOS Swift 中流式传输 Spotify preview_url
- pm2 - PM2 1个月后自动删除进程~
- database - Laravel:选择条件在另一个表中的所有电影
- android - Firestore 分页:使用 DocumentSnapshot 的 StartAfter 查询不起作用
- iccube-reporting - 使用 Measure 中定义的单元格属性来格式化 icCube 表
- php - how to receive data from user with request with less code in laravel
- selenium-webdriver - Unable to start appium server programmatically. Error: spawn ENOTDIR
- g1ant - What does mouse position argument signify in mouse.move command?
- c - getchar()函数的使用和解释
- python - AttributeError:“模块”对象没有属性“message_from_bytes”