@kotlinx.serialization.Serializable
                  
                  
                      public data class SubSealedA(val s: String) : SimpleSealed()
                  
                  
                  
                  
                  
                      @kotlinx.serialization.Serializable
                  
                  
                      public data class SubSealedB(val i: Int) : SimpleSealed()
                  
                  
                  }
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  val messageModule = SerializersModule {
                  
                  
                              polymorphic(Interface::class) {
                  
                  
                                  SimpleSealed::class with SimpleSealed.serializer()
                  
                  
                                  SimpleSealed.SubSealedA::class with SimpleSealed.SubSealedA.serializer()
                  
                  
                                  SimpleSealed.SubSealedB::class with SimpleSealed.SubSealedB.serializer()
                  
                  
                              }
                  
                  
                          }
                  
                  
                  
                  
                  
                          val json = Json(JsonConfiguration.Stable.copy(classDiscriminator = "nodeType"), context = messageModule)
                  
                  
                          val j = json.stringify(PolymorphicSerializer(Interface::class), SimpleSealed.SubSealedA("foo"))
                  
                  
                          println(j)
                  
                  
                          println(json.parse(PolymorphicSerializer(Interface::class), j))
                  
                  
                  
                  
                  
                  Почему оно не стягивает sealed и не работает без указания вручную всех реализаций силда? И.е. это - не нужно, если я сериализую SimpleSealed``SimpleSealed.serializer()'ом, но почему-то вдруг нужно когда сериализую полиморфный интерфейс? 
                  
                  
                  SimpleSealed.SubSealedA::class with SimpleSealed.SubSealedA.serializer()
                  
                  
                  SimpleSealed.SubSealedB::class with SimpleSealed.SubSealedB.serializer()
                  
                  
                  
                  
                  
                  Или я опять чего-то не понимаю?)
                  
                  
                
вы наверное спутали два подходе, https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#sealed-classes
и в этом случае, опять же следуя логике, PolymorphicSerializer() используется для Interface, а для SimpleSealed я указал SimpleSealed.serializer(), который и так умеет работать со всем остальным
Обсуждают сегодня