Kotlin में ऑब्जेक्ट सीरियलाइज़ेशन: लाइब्रेरी और प्रैक्टिकल गाइड
सीरियलाइज़ेशन एक प्रक्रिया है जिसमें जटिल ऑब्जेक्ट्स (क्लास, डेटा स्ट्रक्चर) को स्टोरेज या नेटवर्क ट्रांसमिशन (JSON, XML, Protobuf) के लिए उपयुक्त फॉर्मेट में बदला जाता है। इसका उल्टा ऑपरेशन डीसीरियलाइज़ेशन है, जो ऐसे फॉर्मेट से ऑब्जेक्ट को पुनर्स्थापित करता है। Kotlin में, इसकी संक्षिप्तता और टाइप सेफ्टी के कारण, सीरियलाइज़ेशन बहुत ही सुंदर तरीके से लागू किया गया है। इस लेख में, हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: स्टैंडर्ड लाइब्रेरी kotlinx.serialization, और Kotlin के लिए अनुकूलित लोकप्रिय Java समाधान Gson और Jackson।
1. kotlinx.serialization — JetBrains का आधिकारिक समाधान
kotlinx.serialization लाइब्रेरी Kotlin इकोसिस्टम का हिस्सा है और भाषा के डेवलपर्स द्वारा समर्थित है। यह बिना रिफ्लेक्शन के एक नेटिव दृष्टिकोण प्रदान करती है, जो उच्च प्रदर्शन और कंपाइल टाइम पर टाइप सेफ्टी सुनिश्चित करती है।
कनेक्शन (Gradle)
plugins {
kotlin("jvm") version "1.9.0"
kotlin("plugin.serialization") version "1.9.0"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}
उदाहरण: बेसिक क्लास और सीरियलाइज़ेशन
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class User(
val name: String,
val age: Int,
val email: String? = null
)
fun main() {
val user = User("राहुल", 30, "rahul@example.com")
val jsonString = Json.encodeToString(user)
println(jsonString)
// {"name":"राहुल","age":30,"email":"rahul@example.com"}
val decoded = Json.decodeFromString<User>(jsonString)
println(decoded) // User(name=राहुल, age=30, email=rahul@example.com)
}
लाभ
- टाइप सेफ्टी: सीरियलाइज़ेशन की गलतियाँ कंपाइल टाइम पर ही पकड़ी जाती हैं।
- मल्टीप्लेटफॉर्म सपोर्ट: JVM, JS, Native (KMP) पर काम करता है।
- एक्सटेंसिबिलिटी: जटिल टाइप के लिए कस्टम सीरियलाइज़र।
- null, enum, sealed class, कलेक्शन के लिए बिल्ट-इन सपोर्ट।
एडवांस उदाहरण: नेस्टेड ऑब्जेक्ट और लिस्ट
@Serializable
data class Address(val city: String, val street: String)
@Serializable
data class Person(val name: String, val addresses: List<Address>)
fun main() {
val person = Person("प्रिया", listOf(
Address("दिल्ली", "चांदनी चौक"),
Address("मुंबई", "मरीन ड्राइव")
))
val json = Json { prettyPrint = true }
println(json.encodeToString(person))
// {
// "name": "प्रिया",
// "addresses": [
// { "city": "दिल्ली", "street": "चांदनी चौक" },
// { "city": "मुंबई", "street": "मरीन ड्राइव" }
// ]
// }
}
2. Gson — हल्का और सरल
Google की Gson लाइब्रेरी Java की दुनिया में व्यापक रूप से जानी जाती है। Kotlin के लिए, इसका उपयोग अतिरिक्त कॉन्फ़िगरेशन के साथ किया जाता है ताकि data class और nullable फ़ील्ड को सही ढंग से हैंडल किया जा सके।
कनेक्शन
implementation("com.google.code.gson:gson:2.10.1")
Gson के साथ उदाहरण
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
data class Product(val id: Int, val title: String, val price: Double?)
fun main() {
val gson = Gson()
val product = Product(1, "लैपटॉप", 75000.0)
val json = gson.toJson(product)
println(json) // {"id":1,"title":"लैपटॉप","price":75000.0}
val back = gson.fromJson(json, Product::class.java)
println(back) // Product(id=1, title=लैपटॉप, price=75000.0)
}
विशेषताएँ
- एनोटेशन की आवश्यकता नहीं — किसी भी क्लास के साथ काम करता है।
- डीसीरियलाइज़ेशन के समय टाइप स्पष्ट रूप से बताना होता है (जेनेरिक के साथ असुविधाजनक हो सकता है)।
- डिफ़ॉल्ट रूप से nullable फ़ील्ड वाले
data classको सही ढंग से हैंडल नहीं करता —GsonBuका उपयोग करने की सलाह दी जाती है।
पुस्तकालय में भी
Blade PHP: पूर्ण गाइड उदाहरण सहित
C# (.NET) के लिए OAuth क्लाइंट: तृतीय-पक्ष सेवाओं के माध्यम से प्राधिकरण का कार्यान्वयन
PHP में JWT टोकन: firebase/php-jwt लाइब्रेरी और पूर्ण गाइड
TypeScript में कैशिंग: Redis और Node.js के लिए अन्य समाधान
C# (.NET) में कार्य कतारें: System.Threading.Channels, Hangfire और RabbitMQ