Size: a a a

Kotlin Community

2020 November 16

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Хе, а модуль не получится динамически создать
polymorphic(KouchEntity::class) {
               kClasses.forEach { subclass(it) }
           }
источник

LS

Lev Shagalov in Kotlin Community
Так ты там модули подключаешь
А мне классы в полиморфик указать надо
источник

AN

Alexander Nozik in Kotlin Community
Грубо говоря, там DI и оно собирает сериализационные модули из всех плагинов и собирает из них один
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Так ты там модули подключаешь
А мне классы в полиморфик указать надо
Так полимофрик классы при суммировании модулей мерджатся. Я правда не пробовал этого делать
источник

LS

Lev Shagalov in Kotlin Community
Ну мержатся  но kClasses.forEach { subclass(it) } не сделать
источник

AN

Alexander Nozik in Kotlin Community
Ilya Nikolaev
Ребят подскажите как правильно сделать котлин сериализацию. У меня есть структура https://gist.github.com/linyaDev/4cd72bb49632ff7bb6f9d641138ecc62 и в зависимости от пришедшего поля type , мне нужно , что бы BasePayloadMessage сереализовало по разному. Как это лучше сделать? Пробовал через buildSerialDescriptor но не уверен, что так верно и нет лучшего пути.
источник

LS

Lev Shagalov in Kotlin Community
Alexander Nozik
Так полимофрик классы при суммировании модулей мерджатся. Я правда не пробовал этого делать
источник

IN

Ilya Nikolaev in Kotlin Community
Спасибо большое .
источник

AN

Alexander Nozik in Kotlin Community
Ilya Nikolaev
Ребят подскажите как правильно сделать котлин сериализацию. У меня есть структура https://gist.github.com/linyaDev/4cd72bb49632ff7bb6f9d641138ecc62 и в зависимости от пришедшего поля type , мне нужно , что бы BasePayloadMessage сереализовало по разному. Как это лучше сделать? Пробовал через buildSerialDescriptor но не уверен, что так верно и нет лучшего пути.
Но вообще, если просто текстовое поле, то достаточно сделать закрытую иерархию с соответствующим SerialName
источник

AN

Alexander Nozik in Kotlin Community
Так там нужен тип, который известен при компилляции. Ты не можешь модуль создать динамически (собрать можешь)
источник

IN

Ilya Nikolaev in Kotlin Community
Инт, в целом да. Но это поле тоже хотят оставить.
источник

AN

Alexander Nozik in Kotlin Community
Ilya Nikolaev
Инт, в целом да. Но это поле тоже хотят оставить.
Ну просто по строковому полю полиморфный типа диспатичится сам по себе. Но вот если там не строковое поле, а какая-то крокозябра, луче как в ссылке выше. Будет несколько медленнее, но зато надежнее
источник

AN

Alexander Nozik in Kotlin Community
Или используй subclass(subclass: KClass<T>, serializer: KSerializer<T>) без реификации
источник

IN

Ilya Nikolaev in Kotlin Community
Alexander Nozik
Но вообще, если просто текстовое поле, то достаточно сделать закрытую иерархию с соответствующим SerialName
Проблема в том, что следующее поле надо конвертнуть в зависимости от предыдыщего, а данные к классу придут в джсоне и их надо пременить.
источник

IN

Ilya Nikolaev in Kotlin Community
До этого  я писал кастомный сериализатор, смотрел , что в третьем поле и выбирал нужный мне сериализатор для 4 поля в зависимости от третьего.
источник

LS

Lev Shagalov in Kotlin Community
Alexander Nozik
Или используй subclass(subclass: KClass<T>, serializer: KSerializer<T>) без реификации
Неа
источник

IN

Ilya Nikolaev in Kotlin Community
А теперь обновился до релизной версии и все стало плохо.
источник

AN

Alexander Nozik in Kotlin Community
Ну так типы посмотри.
источник

LS

Lev Shagalov in Kotlin Community
Alexander Nozik
Ну так типы посмотри.
Я тебя не понял
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Я тебя не понял
Ты не можешь вытащить сериализатор из динамической сущности. У тебя там стоит объект типа твоей сущности а сериализатор абстрактный какой-то.
источник