Skip to content

Don't check kind if needn't type discriminator for enum and primitive #2753

Closed
@SettingDust

Description

@SettingDust

What is your use-case and why do you need this feature?
Output the enum and primitive correctly.
If we add a PrimitiveKind descriptor to a subclass of polymorphic serializer. There is error #1486
If we add a wrapper for the primitive(#1252 (comment)). The result will be wrapped even if the classDiscriminatorMode = ClassDiscriminatorMode.NONE like below.

{
  "data": {
    "value": "FOO"
  }
}

Related: #1252 #1486

Describe the solution you'd like
https://github.com/Kotlin/kotlinx.serialization/blob/master/formats/json/commonMain/src/kotlinx/serialization/json/internal/Polymorphic.kt#L41
Avoid failing if needn't discriminator for checkKind. Add a condition in checkKind or encodePolymorphically

val kind = actual.descriptor.kind
if(needDiscriminator || (kind !is SerialKind.ENUM && kind !is PrimitiveKind)) checkKind(kind )

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions