# androidx.navigation3.runtime.serialization

Common/AllAndroid/JVM

## Classes

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer` | A `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavKeySerializer` | A `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for handling polymorphic `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` hierarchies on Android. | android |

## Top-level functions summary

|---|---|---|
| `inline https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer<T>` | `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey> https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/package-summary#NavBackStackSerializer()()` Creates a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/package-summary#NavBackStackSerializer()` for a polymorphic `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` base type. | Cmn |

## Top-level functions

### NavBackStackSerializer

Cmn Artifact: [androidx.navigation3:navigation3-runtime](https://developer.android.com/jetpack/androidx/releases/navigation3) [View Source](https://cs.android.com/search?q=file:androidx/navigation3/runtime/serialization/NavBackStackSerializer.kt+function:NavBackStackSerializer)

```
inline fun <T : NavKey> NavBackStackSerializer(): NavBackStackSerializer<T>
```

Creates a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/package-summary#NavBackStackSerializer()` for a polymorphic `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` base type.

This factory function is a convenience for creating a serializer for a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` whose elements are polymorphic (e.g., different implementations of a `NavKey` interface).

It retrieves a base serializer for the element type `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/package-summary#NavBackStackSerializer()` (which is typically the base `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` interface).

**Important:** For polymorphic serialization to work, you **must** provide a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html` (containing all concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` subtypes) to your `Encoder`/`Decoder` (e.g., via `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSerializable.composable#rememberSerializable(kotlin.Array,androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Function0)`).

`kotlinx.serialization`'s polymorphic dispatch relies on the module available during the encoding/decoding process, not on the specific serializer retrieved by this function.

```kotlin
import androidx.navigation3.runtime.NavBackStack
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.samples.NavBackStackSerializerSamples.Details
import androidx.navigation3.runtime.samples.NavBackStackSerializerSamples.Home
import androidx.navigation3.runtime.serialization.NavBackStackSerializer
import androidx.savedstate.serialization.SavedStateConfiguration
import androidx.savedstate.serialization.decodeFromSavedState
import androidx.savedstate.serialization.encodeToSavedState

val module = SerializersModule {
    polymorphic(NavKey::class) {
        subclass(Home.serializer())
        subclass(Details.serializer())
    }
}
val configuration = SavedStateConfiguration { serializersModule = module }

val serializer = NavBackStackSerializer<NavKey>()

// Pass the same configuration (or at least its serializersModule) to encode/decode:
val backStack = NavBackStack(Home("abc"), Details(42))
val encoded = encodeToSavedState(serializer, backStack, configuration)
val decoded = decodeFromSavedState(serializer, encoded, configuration)
```

| Parameters |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | The reified element type, typically the base `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` interface. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer<T>` | A new `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/package-summary#NavBackStackSerializer()` configured for the base polymorphic type. |