我一直在玩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的子树?
P.S:您会建议改型吗(因为它比较老,也许更成熟)?
谢谢
答案 0 :(得分: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
}
答案 1 :(得分:0)
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)
}