kotlinx.serialization - 使用自定义 DateSerializer 将 ArrayList<Date> 序列化为数据类变量
Posted
技术标签:
【中文标题】kotlinx.serialization - 使用自定义 DateSerializer 将 ArrayList<Date> 序列化为数据类变量【英文标题】:kotlinx.serialization - Serialize ArrayList<Date> as data class variable with custom DateSerializer 【发布时间】:2019-07-20 04:58:51 【问题描述】:我需要使用自定义 DateSerializer 将 ArrayList 序列化为数据类变量, 对于单个日期变量,我使用注释:
@Serializable
data class SearchBundle(
@Serializable(with = DateSerializer::class) var startDate: Date? = null)
有人知道如何处理日期数组列表吗?
【问题讨论】:
【参考方案1】:可能比您当前的方法更容易通过UseSerializers
-annotation 在您的SearchBundle
-class 的文件级别指定DateSerializer
,例如:
@file:UseSerializers(DateSerializer::class)
import kotlinx.serialization.*
import java.util.*
@Serializable
data class SearchBundle(
var startDate: List<Date>? = null)
这样您就可以保持 DateSerializer
原样,而您的其余代码也可以正常工作,即它将自动为该文件中的所有 Date
类型使用 DateSerializer
。
【讨论】:
一个有趣的解决方案,我不知道您可以在文件级别分配序列化程序,我会尝试,谢谢。【参考方案2】:@Serializable
class TestDates(
@Optional @Serializable(with = DatesArraySerializer::class) var dates: ArrayList<Date>? = null
)
object DatesArraySerializer : KSerializer<ArrayList<Date>>
override val descriptor = ArrayClassDesc(DateSerializer.descriptor)
override fun serialize(encoder: Encoder, obj: ArrayList<Date>)
encoder.encodeSerializableValue(ArrayListSerializer(DateSerializer), obj)
override fun deserialize(decoder: Decoder): ArrayList<Date>
val dates = decoder.decodeSerializableValue(ArrayListSerializer(DateSerializer))
return dates.toList() as ArrayList<Date>
【讨论】:
以上是关于kotlinx.serialization - 使用自定义 DateSerializer 将 ArrayList<Date> 序列化为数据类变量的主要内容,如果未能解决你的问题,请参考以下文章
无法解析 org.jetbrains.kotlinx:kotlinx-gradle-serialization-plugin:0.5.1
用 Javalin 框架中的 kotlinx.serialization 替换 Jackson
如何使用 kotlinx.serialization 将库类序列化为 Protobuf?
如何使用 kotlinx.serialization 部分解码 JSON 字符串?
使用 kotlinx.serialization 在 ktor 服务器中接收 Map
kotlinx.serialization.SerializationException:找不到类“MultiPartFormDataContent”的序列化程序