3

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

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

有人知道如何为日期数组列表做这件事吗?

4

2 回答 2

7

可能比您当前的方法更容易通过-annotation指定-class的DateSerializer文件级别,例如:SearchBundleUseSerializers

@file:UseSerializers(DateSerializer::class)

import kotlinx.serialization.*
import java.util.*

@Serializable
data class SearchBundle(
        var startDate: List<Date>? = null)

这样您就可以保持DateSerializer原样,其余代码也可以正常工作,即它将自动DateSerializer用于该文件中的所有Date-types。

于 2019-02-26T16:57:24.157 回答
1
@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>
    }
}
于 2019-02-26T16:36:22.587 回答