Custom Codecs with KotlinX Serialization
summary
Built a custom SaveState encoder/decoder on top of KotlinX Serialization that roundtrips serializable objects into a multiplatform SaveState (Android Bundle on JVM, map on other targets), implements CompositeEncoder via AbstractEncoder, and uses platform fast paths for Parcelables and Java Serializable to avoid bundle boxing. It powers a polymorphic nav backstack with rememberSerializable and a convenience rememberNavBackStack, works in practice but requires explicit subclass registration for open polymorphism or an Android-only reflection-based nav key serializer as a tradeoff.
AI-written summary · about
chapters (23)
- 0:00KotlinX Serialization intro
- 1:04Save state needs serialization
- 3:09Save state encoder/decoder
- 5:17Encoder step by step
- 8:02Nested structures in encoder
- 9:46Writing values & optimizations
- 11:51Decoder for nested structures
- 13:13Reading basic types
- 14:17Full round trip demo
- 16:24Build your own codec?
- 17:07Navigation tree serialization
- 18:32State with KotlinX Serialization
- 21:00Polymorphic serialization
- 22:03NavKey for common types
- 23:27RememberNavBackStack function
- 24:52NavKey serializer (reflection)
- 27:20NavBackStackSerializer details
- 28:46Sealed classes vs custom serializers
- 30:37Future KotlinX improvements
- 31:41Custom NavKey serializers
- 32:43Save state with ViewModel
- 33:27Navigation state flexibility
- 33:49Conclusion & try Navigation 3
related talks
21mFrom Parcelable to @Serializable
36mPerformant Multiplatform Kotlin Serialization
42mPerformant Multiplatform Kotlin Serialization
31mDesign of Kotlin Serialization
24mWhat is Kotlin Serialization, and should I use it?
27mkotlinx.serialization 1.0
36mUsing Kotlin/JS and Kotlin/Native on Android
27mAn Android Dev start to Kotlin Multiplatform
