https://kotlinlang.org logo
#russian
Title
# russian
v

ValV

10/09/2018, 12:47 PM
Я нашёл два варианта:
kotlinx.serialization
и
jackson-module-kotlin
(точнее, подсказали), там сказано, что это всё - для классов и классов данных Котлина. Т. е. это может не сработать для Джава `Observable`ов?
s

sandwwraith

10/10/2018, 12:31 PM
kotlinx.serialization с Observabl’ами не заработат из коробки, оно в основном для мультиплатформы без рефлексии. у джексона больше шансов.
v

ValV

10/10/2018, 12:33 PM
Ох, ещё Джексон. Хотел отделаться более-менее "родными" средствами для IDEA
s

sandwwraith

10/10/2018, 12:33 PM
А чем джексон не родной? Чуть ли не самая распространённая джавовая либа..
v

ValV

10/10/2018, 12:33 PM
Я уже отбросил реактивные списки, переключился на простые списки
s

sandwwraith

10/10/2018, 12:34 PM
Со списками и kotlinx справится
v

ValV

10/10/2018, 12:35 PM
А двойной список
List<List<Any>>
?
s

sandwwraith

10/10/2018, 12:35 PM
ну Any то за что 😞 KSerializer<List<List<T>>> = T.serializer().list.list
v

ValV

10/10/2018, 12:43 PM
Т. е.
Any
не имеет
.serializer()
?
Не понятно, что теперь с этим списком делать,
JSON.stringify(listOfLists)
не даётся... Есть где-то подобные примеры?
s

sandwwraith

10/10/2018, 1:10 PM
Any не всегда имеет .serializer(), скажем так. Для генериков его просто так не достать, для не-сериалайзбл классов его нет
v

ValV

10/10/2018, 1:12 PM
В Pythone это было довольно просто (но он динамически типизированный язык)
s

sandwwraith

10/10/2018, 1:13 PM
и с интроспекцией
как-то так:
Copy code
@Serializable data class Data(val i: Int)

println(JSON.stringify(Data.serializer().list.list, listOf(listOf(Data(42)))))
v

ValV

10/10/2018, 1:15 PM
А можно ли сделать как-то так, чтобы получать серализатор из набора заведомо известных типов (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

sandwwraith

10/11/2018, 10:31 AM
В доках есть семпл по получению сериалайзера для мапы:
val mp: KSerializer<Map<String, Int>> = (StringSerializer to IntSerializer).map // extension on Pair of serializers
. Получается, тут вместо IntSerializer надо написать StringSerializer.list
v

ValV

10/11/2018, 10:57 AM
Хитро, спасибо, буду внимательнее доки просматривать. А то даже начал сомневаться, что это возможно
28 Views