Custom Serialization Logic তৈরি

Kotlin Serialization এবং Data Handling - কটলিন (Kotlin) - Mobile App Development

333

Custom Serialization Logic তৈরি

কটলিনে Kotlin Serialization লাইব্রেরির মাধ্যমে আপনি কাস্টম Serialization Logic তৈরি করতে পারেন। এটি তখন দরকারি হয় যখন আপনার ডেটা ক্লাসের ফিল্ডগুলি JSON এ সঠিকভাবে ম্যাপ না হয় বা আপনার নির্দিষ্ট কোন ফরম্যাটের প্রয়োজন হয়। এই প্রক্রিয়াটি KSerializer ইন্টারফেস ব্যবহার করে করা হয়। নিচে কাস্টম Serialization Logic তৈরি করার প্রক্রিয়া এবং উদাহরণ দেওয়া হলো।


১. Custom Serializer তৈরি করা

কাস্টম Serialization Logic তৈরি করতে, প্রথমে একটি ক্লাস তৈরি করুন যা KSerializer<T> ইন্টারফেস ইমপ্লিমেন্ট করে।

i) Custom Serializer উদাহরণ

ধরি আমাদের একটি User ক্লাস আছে, যেখানে আমরা নাম এবং বয়সের সাথে সাথে ব্যবহারকারীর একটি "userID" রাখব। আমরা চান যে "userID" কে "id" হিসেবে JSON এ রূপান্তর করা হোক।

import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.Serializable

@Serializable
data class User(val userID: Int, val name: String, val age: Int)

@Serializer(forClass = User::class)
object UserSerializer : KSerializer<User> {
    override val descriptor: SerialDescriptor = buildClassSerialDescriptor("User") {
        element("id", Int.serializer().descriptor)
        element("name", String.serializer().descriptor)
        element("age", Int.serializer().descriptor)
    }

    override fun serialize(encoder: Encoder, value: User) {
        val compositeOutput = encoder.beginStructure(descriptor)
        compositeOutput.encodeIntElement(descriptor, 0, value.userID) // "userID" as "id"
        compositeOutput.encodeStringElement(descriptor, 1, value.name)
        compositeOutput.encodeIntElement(descriptor, 2, value.age)
        compositeOutput.endStructure(descriptor)
    }

    override fun deserialize(decoder: Decoder): User {
        // Implementing deserialization logic
        val dec: CompositeDecoder = decoder.beginStructure(descriptor)
        var id = 0
        var name = ""
        var age = 0

        loop@ while (true) {
            when (val index = dec.decodeElementIndex(descriptor)) {
                CompositeDecoder.DECODE_DONE -> break@loop
                0 -> id = dec.decodeIntElement(descriptor, index) // "id"
                1 -> name = dec.decodeStringElement(descriptor, index)
                2 -> age = dec.decodeIntElement(descriptor, index)
                else -> throw SerializationException("Unexpected index: $index")
            }
        }
        dec.endStructure(descriptor)
        return User(userID = id, name = name, age = age)
    }
}

ব্যাখ্যা:

  • User ক্লাসটি তিনটি ফিল্ডের সাথে একটি ডেটা ক্লাস।
  • UserSerializer একটি কাস্টম Serializer যা KSerializer ইন্টারফেস ইমপ্লিমেন্ট করে।
  • serialize ফাংশন JSON এ User অবজেক্টকে রূপান্তরিত করে এবং deserialize ফাংশন JSON থেকে User অবজেক্ট তৈরি করে।

২. কাস্টম Serialization Logic ব্যবহার করা

কাস্টম Serializer ব্যবহার করার জন্য, JSON এ অবজেক্টকে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময় আপনাকে এটি উল্লেখ করতে হবে।

i) Serialize এবং Deserialize উদাহরণ

fun main() {
    val user = User(userID = 1, name = "Alice", age = 30)

    // Serialize using custom serializer
    val jsonString = Json { serializersModule = SerializersModule { 
        contextual(User::class, UserSerializer) 
    }}.encodeToString(UserSerializer, user)
    println(jsonString) // আউটপুট: {"id":1,"name":"Alice","age":30}

    // Deserialize using custom serializer
    val deserializedUser = Json { serializersModule = SerializersModule { 
        contextual(User::class, UserSerializer) 
    }}.decodeFromString(UserSerializer, jsonString)
    println(deserializedUser) // আউটপুট: User(userID=1, name=Alice, age=30)
}

ব্যাখ্যা:

  • এখানে Json.encodeToString এবং Json.decodeFromString ব্যবহার করে User অবজেক্টকে কাস্টম Serializer ব্যবহার করে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয়েছে।

উপসংহার

Kotlin Serialization লাইব্রেরি ব্যবহার করে কাস্টম Serialization Logic তৈরি করা একটি শক্তিশালী এবং নমনীয় প্রক্রিয়া। এটি আপনাকে ডেটা ফরম্যাটের উপর নিয়ন্ত্রণ দেয় এবং আপনার প্রয়োজন অনুযায়ী ডেটা ক্লাসের আচরণকে কাস্টমাইজ করতে সক্ষম করে।

Content added By
Promotion

Are you sure to start over?

Loading...