# ClassDiscriminatorMode

Artifact: [androidx.savedstate:savedstate](https://developer.android.com/jetpack/androidx/releases/savedstate) [View Source](https://cs.android.com/search?q=file:androidx/savedstate/serialization/ClassDiscriminatorMode.kt+class:androidx.savedstate.serialization.ClassDiscriminatorMode) Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.3.0)

*** ** * ** ***

Common/All
- Cmn

  ```
  object ClassDiscriminatorMode
  ```

*** ** * ** ***

Defines which classes and objects should have their serial name included in the `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState` as a class discriminator.

The class discriminator is a `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState` field added by `kotlinx.serialization` with a key (`type` by default), and the class's serial name as a value (fully qualified name by default).

Class discriminator is important for serializing and deserializing [polymorphic class hierarchies](https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#sealed-classes). Default `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/ClassDiscriminatorMode#POLYMORPHIC()` mode adds discriminator only to polymorphic classes.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration#classDiscriminatorMode()` |   |

## Summary

| ### Constants |
|---|---|---|
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/ClassDiscriminatorMode#ALL_OBJECTS() = 1` Includes class discriminators whenever possible. | Cmn |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/ClassDiscriminatorMode#POLYMORPHIC() = 2` Includes class discriminators for polymorphic classes. | Cmn |

## Constants

### ALL_OBJECTS

Cmn Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.3.0)

```
const val ALL_OBJECTS = 1: Int
```

Includes class discriminators whenever possible.

Given that class discriminator is added as a `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState` field, adding class discriminator is possible when the resulting `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState` is an object --- i.e., for Kotlin classes, `object`s, and interfaces. More specifically, discriminator is added to the output of serializers which descriptors have a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.descriptors/-serial-kind/index.html` of either `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.descriptors/-structure-kind/-c-l-a-s-s/index.html` or `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.descriptors/-structure-kind/-o-b-j-e-c-t/index.html`.

### POLYMORPHIC

Cmn Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.3.0)

```
const val POLYMORPHIC = 2: Int
```

Includes class discriminators for polymorphic classes.

Sealed classes, abstract classes, and interfaces are polymorphic classes by definition. Open classes can be polymorphic if they are serializable with `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-polymorphic-serializer/index.html` and properly registered in the `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html`. See [kotlinx.serialization polymorphism guide](https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#sealed-classes) for details.

| See also |
|---|---|
| `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html` |   |
| `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module-builder/index.html` |   |
| `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-polymorphic-module-builder/index.html` |   |