kotlinx.serialization - Сериализует ArrayList <Date>как переменную класса данных с пользовательским DateSerializer - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно сериализовать ArrayList как переменную класса данных с пользовательским DateSerializer, с одной переменной даты, я использую аннотацию:

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

Кто-нибудь знает, как это сделать для arrayList дат?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вероятно, проще, чем ваш текущий подход, просто указать DateSerializer на уровне файла вашего SearchBundle -класса через UseSerializers -аннотацию , например:

@file:UseSerializers(DateSerializer::class)

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

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

Таким образом, вы можете сохранить DateSerializer как есть, а остальная часть вашего кода просто будет работать, то есть он автоматически будет использовать DateSerializer для всех Date -типов в этом файле.

0 голосов
/ 26 февраля 2019
@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>
    }
}
...