Enum Serialization এবং Deserialization

Gson এবং Enums ব্যবস্থাপনা - জিসন (Gson) - Java Technologies

346

Enum হল একটি বিশেষ ধরনের ডেটা টাইপ যা একটি নির্দিষ্ট সীমিত সেটের মান ধারণ করে। Gson লাইব্রেরি Enum-কে JSON ডেটাতে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সমর্থ, তবে আপনি কখনো কখনো Enum-এর মান কাস্টমাইজ করতে চাইতে পারেন। Gson স্বয়ংক্রিয়ভাবে Enum-কে JSON স্ট্রিং হিসাবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করে, তবে Enum-এ কাস্টম নাম বা মান ব্যবহারের জন্য কিছু কাস্টম কনফিগারেশনও করা যায়।

এখানে আমরা দেখবো কিভাবে Gson ব্যবহার করে Enum-এর Serialization (সিরিয়ালাইজেশন) এবং Deserialization (ডেসিরিয়ালাইজেশন) করা যায়।


1. Enum Serialization (সিরিয়ালাইজেশন)

Serialization বা সিরিয়ালাইজেশন এর মাধ্যমে একটি Java Enum অবজেক্টকে JSON ডেটা হিসেবে রূপান্তরিত করা হয়। Gson ডিফল্টভাবে Enum-এর নাম (যেমন RED, GREEN, BLUE) JSON স্ট্রিং হিসেবে রূপান্তর করে।

উদাহরণ: Enum Serialization

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        // Enum অবজেক্ট তৈরি করা
        Color color = Color.RED;

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // Enum অবজেক্ট থেকে JSON সিরিয়ালাইজ করা
        String json = gson.toJson(color);
        System.out.println("Serialized Enum: " + json);
    }
}

enum Color {
    RED, GREEN, BLUE;
}

আউটপুট:

Serialized Enum: "RED"

ব্যাখ্যা:

  • এখানে Color.RED Enum-কে Gson JSON স্ট্রিং "RED" হিসেবে সিরিয়ালাইজ করেছে, যা Enum এর ডিফল্ট নাম।

2. Enum Deserialization (ডেসিরিয়ালাইজেশন)

Deserialization বা ডেসিরিয়ালাইজেশন হল JSON ডেটা থেকে Java Enum অবজেক্টে রূপান্তর করা। Gson ডিফল্টভাবে JSON স্ট্রিং (যেমন "RED", "GREEN", "BLUE") কে Enum-এর মানে রূপান্তর করে।

উদাহরণ: Enum Deserialization

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        String json = "\"GREEN\"";

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // JSON থেকে Enum অবজেক্টে ডেসিরিয়ালাইজ করা
        Color color = gson.fromJson(json, Color.class);
        System.out.println("Deserialized Enum: " + color);
    }
}

enum Color {
    RED, GREEN, BLUE;
}

আউটপুট:

Deserialized Enum: GREEN

ব্যাখ্যা:

  • এখানে json স্ট্রিং "GREEN" থেকে Gson Enum Color.GREEN এ রূপান্তর করেছে।

3. Enum Serialization and Deserialization with Custom Values

কখনো কখনো আপনি চান যে Enum-এ নির্দিষ্ট মান ব্যবহার করা হোক, যেমন Enum-এর নামের পরিবর্তে কিছু কাস্টম মান। এ জন্য Gson-এ কাস্টম Serializer এবং Deserializer তৈরি করা যেতে পারে।

উদাহরণ: কাস্টম Enum Serialization এবং Deserialization

import com.google.gson.*;
import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        // Enum অবজেক্ট তৈরি
        Status status = Status.SUCCESS;

        // GsonBuilder দিয়ে কাস্টম Serializer এবং Deserializer ব্যবহার করা
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Status.class, new StatusSerializer())
                        .registerTypeAdapter(Status.class, new StatusDeserializer())
                        .create();

        // Enum অবজেক্ট থেকে JSON সিরিয়ালাইজ করা
        String json = gson.toJson(status);
        System.out.println("Serialized Enum with Custom Value: " + json);

        // JSON থেকে Enum অবজেক্টে ডেসিরিয়ালাইজ করা
        Status deserializedStatus = gson.fromJson(json, Status.class);
        System.out.println("Deserialized Enum: " + deserializedStatus);
    }
}

// Enum ক্লাস
enum Status {
    SUCCESS("200"), FAILURE("500");

    private final String code;

    Status(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public static Status fromCode(String code) {
        for (Status status : Status.values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }
}

// কাস্টম Serializer
class StatusSerializer implements JsonSerializer<Status> {
    @Override
    public JsonElement serialize(Status status, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(status.getCode());  // কাস্টম মান (code) সিরিয়ালাইজ
    }
}

// কাস্টম Deserializer
class StatusDeserializer implements JsonDeserializer<Status> {
    @Override
    public Status deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return Status.fromCode(json.getAsString());  // কাস্টম মান (code) অনুযায়ী ডেসিরিয়ালাইজ
    }
}

আউটপুট:

Serialized Enum with Custom Value: "200"
Deserialized Enum: SUCCESS

ব্যাখ্যা:

  • এই উদাহরণে Status Enum-এ SUCCESS এবং FAILURE এর পরিবর্তে আমরা 200 এবং 500 কোড ব্যবহার করেছি। Gson এর কাস্টম Serializer এবং Deserializer-এর মাধ্যমে আমরা কাস্টম মান (যেমন 200 এবং 500) JSON আউটপুটে ব্যবহার করেছি।
  • সিরিয়ালাইজেশনের সময় Status.SUCCESS Enum কে "200" হিসেবে রূপান্তরিত করা হয়েছে, এবং ডেসিরিয়ালাইজেশনের সময় "200" থেকে Status.SUCCESS Enum তৈরি করা হয়েছে।

4. Enum with Complex Values (Complex Enum)

Enum এর সাথে যদি আরও বেশি ডেটা থাকে, যেমন একটি Enum অবজেক্টে একাধিক প্রপার্টি, তাহলে আপনি কাস্টম Serializer এবং Deserializer ব্যবহার করে সেগুলি নিয়ন্ত্রণ করতে পারবেন।

উদাহরণ: Complex Enum

import com.google.gson.*;
import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        // Complex Enum অবজেক্ট তৈরি
        Job job = Job.DEVELOPER;

        // GsonBuilder দিয়ে কাস্টম Serializer এবং Deserializer ব্যবহার করা
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Job.class, new JobSerializer())
                        .registerTypeAdapter(Job.class, new JobDeserializer())
                        .create();

        // Enum অবজেক্ট থেকে JSON সিরিয়ালাইজ করা
        String json = gson.toJson(job);
        System.out.println("Serialized Complex Enum: " + json);

        // JSON থেকে Enum অবজেক্টে ডেসিরিয়ালাইজ করা
        Job deserializedJob = gson.fromJson(json, Job.class);
        System.out.println("Deserialized Complex Enum: " + deserializedJob);
    }
}

// Complex Enum ক্লাস
enum Job {
    DEVELOPER("Dev", 5000),
    MANAGER("Mngr", 8000);

    private final String code;
    private final int salary;

    Job(String code, int salary) {
        this.code = code;
        this.salary = salary;
    }

    public String getCode() {
        return code;
    }

    public int getSalary() {
        return salary;
    }

    public static Job fromCode(String code) {
        for (Job job : Job.values()) {
            if (job.getCode().equals(code)) {
                return job;
            }
        }
        return null;
    }
}

// Complex Enum Serializer
class JobSerializer implements JsonSerializer<Job> {
    @Override
    public JsonElement serialize(Job job, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("code", job.getCode());
        jsonObject.addProperty("salary", job.getSalary());
        return jsonObject;
    }
}

// Complex Enum Deserializer
class JobDeserializer implements JsonDeserializer<Job> {
    @Override
    public Job deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String code = jsonObject.get("code").getAsString();
        return Job.fromCode(code);
    }
}

আউটপুট:

Serialized Complex Enum: {"code":"Dev","salary":5000}
Deserialized Complex Enum: DEVELOPER

ব্যাখ্যা:

  • এখানে Job Enum-এ code এবং salary নামে দুটি প্রপার্টি আছে।
  • Gson কাস্টম Serializer এবং Deserializer ব্যবহার করে code এবং salary JSON ফিল্ড হিসেবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করছে।

Gson-এ Enum Serialization এবং Deserialization সহজেই করা যায়। ডিফল্টভাবে, Gson Enum নামকে JSON স্ট্রিং হিসেবে রূপান্তর করে। তবে, আপনি কাস্টম Serializer এবং Deserializer ব্যবহার করে Enum-এর কাস্টম মান এবং জটিল ডেটা কাস্টমাইজ করতে পারেন। এটা আপনাকে আরও নিয়ন্ত্রণ এবং নমনীয়তা প্রদান করে, যখন Enum-কে JSON ডেটাতে রূপান্তর করতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...