-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
use MutableCollection<User>
import com.github.jershell.kbson.KBson
import kotlinx.serialization.Serializable
import org.bson.BsonArray
import org.bson.BsonDocument
import org.bson.BsonElement
import org.bson.BsonString
@Serializable
data class Container(
val users: MutableCollection<User>
)
@Serializable
data class User(val name: String)
fun main() {
val bsonDocument = BsonDocument(
mutableListOf(
BsonElement("users", BsonArray(mutableListOf(BsonDocument("name", BsonString("a"))))),
)
)
println(KBson.default.parse(Container.serializer(), bsonDocument))
}exception
Exception in thread "main" org.bson.BsonInvalidOperationException: readStartDocument can only be called when CurrentBSONType is DOCUMENT, not when CurrentBSONType is ARRAY.
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:689)
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:721)
at org.bson.AbstractBsonReader.readStartDocument(AbstractBsonReader.java:449)
at com.github.jershell.kbson.FlexibleDecoder.beginStructure(BsonFlexibleDecoder.kt:51)
at kotlinx.serialization.internal.AbstractPolymorphicSerializer.deserialize(AbstractPolymorphicSerializer.kt:121)
at kotlinx.serialization.encoding.Decoder$DefaultImpls.decodeSerializableValue(Decoding.kt:257)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:16)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
at Container$$serializer.deserialize(a.kt:8)
at Container$$serializer.deserialize(a.kt:8)
at kotlinx.serialization.encoding.Decoder$DefaultImpls.decodeSerializableValue(Decoding.kt:257)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:16)
at com.github.jershell.kbson.KBson.parse(KBson.kt:22)
at AKt.main(a.kt:22)
at AKt.main(a.kt)
if use List<User>, no exception
@Serializable
data class Container(
val users: List<User>
)
@Serializable
data class User(val name: String)
fun main() {
val bsonDocument = BsonDocument(
mutableListOf(
BsonElement("users", BsonArray(mutableListOf(BsonDocument("name", BsonString("a"))))),
)
)
println(KBson.default.parse(Container.serializer(), bsonDocument))
}Metadata
Metadata
Assignees
Labels
No labels