【问题标题】:kotlinx.serialization - Serialize ArrayList<Date> as data class variable with custom DateSerializerkotlinx.serialization - 使用自定义 DateSerializer 将 ArrayList<Date> 序列化为数据类变量
【发布时间】:2019-07-20 04:58:51
【问题描述】:

我需要使用自定义 DateSerializer 将 ArrayList 序列化为数据类变量, 对于单个日期变量,我使用注释:

@Serializable
      data class SearchBundle(
      @Serializable(with = DateSerializer::class) var startDate: Date? = null)

有人知道如何处理日期数组列表吗?

【问题讨论】:

    标签: android serialization kotlin kotlinx.serialization


    【解决方案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>
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2015-03-02
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多