# NavBackStackSerializer

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+class:androidx.navigation3.runtime.serialization.NavBackStackSerializer) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0) Common/AllAndroid/JVM
- Cmn

  ```
  class NavBackStackSerializer<T : NavKey> : KSerializer<NavBackStack<T>>
  ```

*** ** * ** ***

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`.

This serializer wraps a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for the element type `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer`, enabling serialization and deserialization of `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` instances. The serialization of individual elements is delegated to the provided `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#(kotlinx.serialization.KSerializer)`.

If your stack elements `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer` are open polymorphic (e.g., a interface for different screens), the provided `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#(kotlinx.serialization.KSerializer)` must be correctly configured to handle this.

```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.decodeFromSavedState
import androidx.savedstate.serialization.encodeToSavedState

// On Android, the no-argument overload uses reflection and requires no configuration.
// This will throw a runtime exception on non-Android platforms during serialization.
val serializer = NavBackStackSerializer<NavKey>()

val backStack = NavBackStack(Home("abc"), Details(42))
val encoded = encodeToSavedState(serializer, backStack)
val decoded = decodeFromSavedState(serializer, encoded)
```

| Parameters |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | The type of elements stored in the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack`. |

## Summary

| ### Public constructors |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey> https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#NavBackStackSerializer(kotlinx.serialization.KSerializer)(elementSerializer: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html<T>)` | Cmn |

| ### Public functions |
|---|---|---|
| `open https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<T>` | `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#deserialize(kotlinx.serialization.encoding.Decoder)(decoder: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encoding/-decoder/index.html)` | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#serialize(kotlinx.serialization.encoding.Encoder,androidx.navigation3.runtime.NavBackStack)(encoder: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encoding/-encoder/index.html, value: https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<T>)` | Cmn |

| ### Public properties |
|---|---|---|
| `open https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.descriptors/-serial-descriptor/index.html` | `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer#descriptor()` | Cmn |

## Public constructors

### NavBackStackSerializer

Cmn

```
<T : NavKey> NavBackStackSerializer(elementSerializer: KSerializer<T>)
```

| Parameters |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | The type of elements stored in the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack`. |
| `elementSerializer: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html<T>` | The `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` used to serialize and deserialize individual elements. |

## Public functions

### deserialize

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

```
open fun deserialize(decoder: Decoder): NavBackStack<T>
```

### serialize

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

```
open fun serialize(encoder: Encoder, value: NavBackStack<T>): Unit
```

## Public properties

### descriptor

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

```
open val descriptor: SerialDescriptor
```