2

我一直在玩 Kotlinx.serialization,我一直在尝试解析一个子字符串:

给定一个像这样的 JSON:

{
   "Parent" : {
     "SpaceShip":"Tardis",
     "Mark":40
   }
}

我的代码是这样的:

data class SomeClass(
   @SerialName("SpaceShip") ship:String,
   @SerialName("Mark") mark:Int)

显然,Json.nonstrict.parse(SomeClass.serializer(), rawString)会失败,因为“SpaceShip”和“Mark”这对不在 JSON 的根目录中。

如何让序列化程序引用 JSON 的子树?

PS:你会推荐改造吗(因为它更老,也许更成熟)?

4

2 回答 2

1
@Serializable
data class Parent(
    @SerialName("Parent")
    val someClass: SomeClass
)

@Serializable
data class SomeClass(
    @SerialName("SpaceShip")
    val ship: String,
    @SerialName("Mark")
    val mark: Int
)

fun getSomeClass(inputStream: InputStream): SomeClass {
    val json = Json(JsonConfiguration.Stable)
    val jsonString = Scanner(inputStream).useDelimiter("\\A").next()
    val parent = json.parse(Parent.serializer(), jsonString)
    return parent.someClass
}
于 2020-04-24T19:44:53.917 回答
1
import kotlinx.serialization.*
import kotlinx.serialization.json.Json


@Serializable
data class Parent(
    @SerialName("Parent")
    val parent: SomeClass
)

@Serializable
data class SomeClass(
    @SerialName("SpaceShip")
    val ship:String,
    @SerialName("Mark")
    val mark:Int
)

fun main() {
    val parent = Json.parse(Parent.serializer(), "{\"Parent\":{\"SpaceShip\":\"Tardis\",\"Mark\":40}}")
    println(parent)
}
于 2019-05-11T18:06:13.253 回答