تسلسل الكائنات في Kotlin: دليل شامل للمكتبات والأدوات
التسلسل هو عملية تحويل كائن إلى تنسيق يمكن حفظه (مثلاً في ملف) أو نقله عبر الشبكة (عبر REST API، رسائل Kafka، إلخ). العملية العكسية - إلغاء التسلسل - تستعيد الكائن من هذا التنسيق. في نظام Kotlin البيئي، توجد عدة مكتبات قوية للتسلسل، لكل منها ميزاتها الخاصة. في هذه المقالة، سنشرح أربعة مناهج رئيسية: kotlinx.serialization، Gson، Moshi و Jackson.
1. kotlinx.serialization - الخيار الأصلي لـ Kotlin
مكتبة kotlinx.serialization التي طورتها JetBrains هي "المعيار الذهبي" لمشاريع Kotlin. وهي تدعم تعدد المنصات (JVM، JS، Native) وتستخدم التعليقات التوضيحية لإنشاء الكود في مرحلة الترجمة.
الإضافة (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.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User(val name: String, val age: Int, val email: String? = null)
fun main() { val user = User("إيفان", 30, "ivan@example.com")
// التسلسل إلى JSON val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"إيفان","age":30,"email":"ivan@example.com"}
// إلغاء التسلسل من JSON val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=إيفان, age=30, email=ivan@example.com)}الميزات
- أمان القيم الخالية: دعم الحقول القابلة للخالية عبر
? - تعدد الأشكال: تسلسل الفئات المختومة والتسلسلات الهرمية
- التنسيقات المخصصة: JSON، CBOR، Protobuf، Properties
- الأداء: إنشاء الكود بدون انعكاس
2. Gson - الكلاسيكية من Google
Gson هي واحدة من أقدم المكتبات لـ Java/Kotlin. إنها سهلة الاستخدام، ولكنها تستخدم الانعكاس، مما قد يقلل الأداء على كميات كبيرة من البيانات.
الإضافة
implementation("com.google.code.gson:gson:2.10.1")مثال
import com.google.gson.Gson
data class Product(val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val product = Product(1, "لابتوب", 79999.99)
// التسلسل val json = gson.toJson(product) println(json) // {"id":1,"title":"لابتوب","price":79999.99}
// إلغاء التسلسل val restored = gson.fromJson(json, Product::class.java) println(restored) // Product(id=1, title=لابتوب, price=79999.99)}الميزات
- البساطة: الحد الأدنى من التهيئة
- المرونة:
TypeAdapterمخصص للأنواع المعقدة - العيوب: الانعكاس، عدم وجود دعم أصلي لـ Kotlin data class (يتطلب إضافة أو
@JvmField)
3. Moshi - البديل الحديث لـ Gson
Moshi من Square هي مكتبة خفيفة مع دعم Kotlin مباشر. تستخدم إنشاء الكود عبر التعليقات التوضيحية، مما يجعلها أسرع من Gson.
الإضافة
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // لإنشاء الكودمثال
import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
@JsonClass(generateAdapter = true)data class Book(val isbn: String, val title: String, val authors: