Я нашёл два варианта: `kotlinx.serialization` и `j...
# russian
v
Я нашёл два варианта:
kotlinx.serialization
и
jackson-module-kotlin
(точнее, подсказали), там сказано, что это всё - для классов и классов данных Котлина. Т. е. это может не сработать для Джава `Observable`ов?
s
kotlinx.serialization с Observabl’ами не заработат из коробки, оно в основном для мультиплатформы без рефлексии. у джексона больше шансов.
v
Ох, ещё Джексон. Хотел отделаться более-менее "родными" средствами для IDEA
s
А чем джексон не родной? Чуть ли не самая распространённая джавовая либа..
v
Я уже отбросил реактивные списки, переключился на простые списки
s
Со списками и kotlinx справится
v
А двойной список
List<List<Any>>
?
s
ну Any то за что 😞 KSerializer<List<List<T>>> = T.serializer().list.list
v
Т. е.
Any
не имеет
.serializer()
?
Не понятно, что теперь с этим списком делать,
JSON.stringify(listOfLists)
не даётся... Есть где-то подобные примеры?
s
Any не всегда имеет .serializer(), скажем так. Для генериков его просто так не достать, для не-сериалайзбл классов его нет
v
В Pythone это было довольно просто (но он динамически типизированный язык)
s
и с интроспекцией
как-то так:
Copy code
@Serializable data class Data(val i: Int)

println(JSON.stringify(Data.serializer().list.list, listOf(listOf(Data(42)))))
v
А можно ли сделать как-то так, чтобы получать серализатор из набора заведомо известных типов (String, Int, Double, Boolean, Date)?
Т. е. в примерах показано, как из одного какого-либо типа (класса данных)
Ну чтобы обойти проблему с неоднозначностью
Any
Что-то вроде
setOf(String, Int, Double, Boolean).serializer().list.list
?
@sandwwraith, а как сериализовать ассоциативный массив типа
Map<String, List<String>>
? Я нашёл в примерах, только как сериализовать его внутри пользовательского класса типа
data class Data(val myMap: Map<String, String>)
s
В доках есть семпл по получению сериалайзера для мапы:
val mp: KSerializer<Map<String, Int>> = (StringSerializer to IntSerializer).map // extension on Pair of serializers
. Получается, тут вместо IntSerializer надо написать StringSerializer.list
v
Хитро, спасибо, буду внимательнее доки просматривать. А то даже начал сомневаться, что это возможно