kotlinx.serialization - Сериализует ArrayList<Date> как переменную класса данных с пользовательским DateSerializer
Мне нужно сериализовать ArrayList как переменную класса данных с пользовательским DateSerializer, с одной переменной даты, я использую аннотацию:
@Serializable
data class SearchBundle(
@Serializable(with = DateSerializer::class) var startDate: Date? = null)
Кто-нибудь знает, как это сделать для arrayList дат?
2 ответа
Возможно, проще, чем ваш нынешний подход, просто указать 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
-типы в этом файле.
@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>
}
}