# NavKeySerializer

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

  ```
  open class NavKeySerializer<T : NavKey> : KSerializer<T>
  ```

*** ** * ** ***

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.

This serializer enables `kotlinx.serialization` to save and restore different disparate implementations of `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` without requiring developers to manually register them in a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html`.

## How It Works

Instead of serializing the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` directly, this class serializes two pieces of information:

1. The fully qualified class name of the concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` (e.g., "com.example.Home").

2. The actual `NavKey` object, using its specific runtime serializer.

During deserialization, it reads the class name first, uses reflection (`Class.forName`) to find the corresponding `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for that class, and then uses that serializer to deserialize the object data.

## Platform Limitation

**This serializer is for Android only.** It relies on JVM reflection (`Class.forName`) which is not available on other platforms in a multiplatform context.

| Parameters |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | The base `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` type this serializer can handle. |

## Summary

| ### Public constructors |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey> https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavKeySerializer#NavKeySerializer()()` | android |

| ### Public functions |
|---|---|---|
| `open T` | `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavKeySerializer#deserialize(kotlinx.serialization.encoding.Decoder)(decoder: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encoding/-decoder/index.html)` Deserializes a concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` implementation. | android |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavKeySerializer#serialize(kotlinx.serialization.encoding.Encoder,androidx.navigation3.runtime.NavKey)(encoder: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.encoding/-encoder/index.html, value: T)` Serializes a concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` implementation. | android |

| ### 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/NavKeySerializer#descriptor()` | android |

## Public constructors

### NavKeySerializer

android

```
<T : NavKey> NavKeySerializer()
```

| Parameters |
|---|---|
| `<T : https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | The base `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` type this serializer can handle. |

## Public functions

### deserialize

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

```
open fun deserialize(decoder: Decoder): T
```

Deserializes a concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` implementation.

It first reads the class name (`type`), then uses that name to find the corresponding `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html` for the class using **reflection** . Finally, it uses that specific serializer to read the actual object data (`value`).

### serialize

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

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

Serializes a concrete `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` implementation.

It writes the object's fully qualified class name (`type`) first, then uses the object's runtime serializer to write the object's data (`value`).

## Public properties

### descriptor

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

```
open val descriptor: SerialDescriptor
```