Java 有没有办法在Kotlinx序列化中序列化映射
我正在使用Kotlin 1.3.10(并绑定到此版本)和Kotlinx Serialization 0.13,在Kotlinx Serialization中序列化映射时遇到问题 我有以下代码:Java 有没有办法在Kotlinx序列化中序列化映射,java,dictionary,kotlin,serialization,Java,Dictionary,Kotlin,Serialization,我正在使用Kotlin 1.3.10(并绑定到此版本)和Kotlinx Serialization 0.13,在Kotlinx Serialization中序列化映射时遇到问题 我有以下代码: @Serializer(forClass = LocalDate::class) object LocalDateSerializer : KSerializer<LocalDate> { private val formatter: DateTimeFormatter = DateT
@Serializer(forClass = LocalDate::class)
object LocalDateSerializer : KSerializer<LocalDate> {
private val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
override val descriptor: SerialDescriptor
get() = StringDescriptor.withName("LocalDate")
override fun serialize(encoder: Encoder, obj: LocalDate) {
encoder.encodeString(obj.format(formatter))
}
override fun deserialize(decoder: Decoder): LocalDate {
return LocalDate.parse(decoder.decodeString(), formatter)
}
}
@Serializable
data class MyClass (
val students: Map<String,LocalDate>
)
@UnstableDefault
@Test
fun decodeEncodeSerialization() {
val jsonParser = Json(
JsonConfiguration(
allowStructuredMapKeys = true
)
)
val mc = MyClass(
mapOf("Alex" to LocalDate.of(1997,2,23))
)
val mcJson = jsonParser.stringify(MyClass.serializer(), mc)
val mcObject = jsonParser.parse(MyClass.serializer(), mcJson)
assert(true)
}
但有了地图,我似乎不知道该怎么做。我把它放在物体上方或旁边
@Serializable
data class MyClass (
val students: Map<String,@Serializable(with = LocalDateSerializer::class) LocalDate> //here
//or
//@Serializable(with = LocalDateSerializer::class)
//val students2: Map<String, LocalDate> //here
)
@Serializable
数据类MyClass(
学生们:地图//在这里
//或
//@可序列化(with=LocalDateSerializer::class)
//val学生2:地图//这里
)
…但测试仍然失败
kotlinx.serialization.SerializationException:找不到类java.time.LocalDate的无参数序列化程序(Kotlin反射不可用)。对于泛型类,如列表,请显式提供序列化程序
我的解决办法是
@Serializable
data class MyClass (
val students: List<Student>
)
@Serializable
data class Student (
val name: String,
@Serializable(with = LocalDateSerializer::class)
val dob: LocalDate
)
@Serializable
数据类MyClass(
学生名单
)
@可序列化
数据类学生(
val name:String,
@可序列化(with=LocalDateSerializer::class)
val-dob:LocalDate
)
有没有一种方法我不会求助于解决方法?谢谢大家!
@file:UseSerializers(LocalDateSerializer::class)
将它放在声明对象的文件中,每次看到本地日期时,它都应该使用LocalDateSerializer
@file:UseSerializers(LocalDateSerializer::class)