Gson এর সাথে Enum কনফিগারেশন

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

312

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

1. Gson-এর সাথে Enum ব্যবহার:

যেহেতু Gson স্বয়ংক্রিয়ভাবে Enum ফিল্ডগুলোকে JSON-এ সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারে, তাই সাধারণ Enum ক্লাস ব্যবহার করা যেতে পারে।

উদাহরণ:

import com.google.gson.Gson;

enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

class User {
    String name;
    Status status;

    public User(String name, Status status) {
        this.name = name;
        this.status = status;
    }
}

public class Main {
    public static void main(String[] args) {
        // একটি User অবজেক্ট তৈরি করুন
        User user = new User("John Doe", Status.ACTIVE);

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

        // User অবজেক্টকে JSON-এ রূপান্তর করুন
        String json = gson.toJson(user);

        // JSON আউটপুট প্রিন্ট করুন
        System.out.println(json);
    }
}

আউটপুট:

{"name":"John Doe","status":"ACTIVE"}

এখানে Status enum-এর মান ACTIVE JSON-এ "status": "ACTIVE" হিসাবে সিরিয়ালাইজ হয়েছে।


2. Gson-এ Enum-এর কাস্টম সিরিয়ালাইজেশন (Custom Serialization):

কখনও কখনও আপনি চাইবেন না যে Enum এর ডিফল্ট মান (যেমন, ACTIVE, INACTIVE) সরাসরি JSON-এ সিরিয়ালাইজ করা হোক। আপনি JsonSerializer ব্যবহার করে Enum-এর কাস্টম সিরিয়ালাইজেশন তৈরি করতে পারেন।

উদাহরণ:

ধরা যাক, আপনি Enum মানগুলিকে ছোট হাতের স্ট্রিং (lowercase string) হিসেবে সিরিয়ালাইজ করতে চান।

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

enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

class User {
    String name;
    Status status;

    public User(String name, Status status) {
        this.name = name;
        this.status = status;
    }
}

class StatusSerializer implements JsonSerializer<Status> {
    @Override
    public JsonElement serialize(Status status, Type typeOfSrc, JsonSerializationContext context) {
        // Enum মানটি lowercase আকারে JSON-এ রূপান্তর করা
        return new JsonPrimitive(status.name().toLowerCase());
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User("John Doe", Status.ACTIVE);

        // GsonBuilder ব্যবহার করে কাস্টম সিরিয়ালাইজার নিবন্ধিত করুন
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Status.class, new StatusSerializer())
                        .create();

        // User অবজেক্টকে JSON-এ রূপান্তর করুন
        String json = gson.toJson(user);

        // JSON আউটপুট প্রিন্ট করুন
        System.out.println(json);
    }
}

আউটপুট:

{"name":"John Doe","status":"active"}

এখানে ACTIVE Enum মানটি active হিসেবে JSON-এ সিরিয়ালাইজ হয়েছে, যেহেতু আমরা StatusSerializer কাস্টম সিরিয়ালাইজার তৈরি করেছি যা Enum মানটিকে lowercase আকারে রূপান্তর করে।


3. Gson-এ Enum-এর কাস্টম ডেসিরিয়ালাইজেশন (Custom Deserialization):

যখন JSON থেকে Java Enum অবজেক্টে রূপান্তর করতে চান, তখন JsonDeserializer ব্যবহার করে আপনি কাস্টম ডেসিরিয়ালাইজেশনও করতে পারেন।

উদাহরণ:

ধরা যাক, JSON এ "active", "inactive" ইত্যাদি স্ট্রিং ব্যবহার করা হয়েছে, কিন্তু Java Enum এ ACTIVE, INACTIVE এই নামগুলো রয়েছে। এই মানগুলোকে কাস্টম ডেসিরিয়ালাইজ করতে নিচের কোড ব্যবহার করা যায়:

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

enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

class User {
    String name;
    Status status;

    public User(String name, Status status) {
        this.name = name;
        this.status = status;
    }
}

class StatusDeserializer implements JsonDeserializer<Status> {
    @Override
    public Status deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        String status = json.getAsString().toUpperCase();  // lowercase থেকে uppercase এ রূপান্তর
        return Status.valueOf(status);
    }
}

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\", \"status\":\"active\"}";

        // GsonBuilder ব্যবহার করে কাস্টম ডেসিরিয়ালাইজার নিবন্ধিত করুন
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Status.class, new StatusDeserializer())
                        .create();

        // JSON স্ট্রিং থেকে User অবজেক্টে রূপান্তর করুন
        User user = gson.fromJson(json, User.class);

        // User অবজেক্টের মান প্রিন্ট করুন
        System.out.println("Name: " + user.name);
        System.out.println("Status: " + user.status);
    }
}

আউটপুট:

Name: John Doe
Status: ACTIVE

এখানে JSON স্ট্রিং "status": "active" থেকে Status.ACTIVE এ রূপান্তরিত হয়েছে, কারণ আমরা StatusDeserializer কাস্টম ডেসিরিয়ালাইজার তৈরি করেছি যা JSON থেকে Enum অবজেক্টে কাস্টম রূপান্তর করে।


4. @SerializedName এবং Enum এর সাথে ব্যবহার:

আপনি যদি Enum-এর সাথে JSON স্ট্রিং ম্যাপ করতে চান, তবে @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন।

উদাহরণ:

import com.google.gson.annotations.SerializedName;

enum Status {
    @SerializedName("active_status")
    ACTIVE,
    @SerializedName("inactive_status")
    INACTIVE,
    @SerializedName("pending_status")
    PENDING
}

class User {
    String name;
    Status status;

    public User(String name, Status status) {
        this.name = name;
        this.status = status;
    }
}

public class Main {
    public static void main(String[] args) {
        // JSON স্ট্রিং
        String json = "{\"name\":\"John Doe\", \"status\":\"active_status\"}";

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

        // JSON স্ট্রিং থেকে User অবজেক্টে রূপান্তর করুন
        User user = gson.fromJson(json, User.class);

        System.out.println("Name: " + user.name);
        System.out.println("Status: " + user.status);
    }
}

আউটপুট:

Name: John Doe
Status: ACTIVE

এখানে active_status JSON ভ্যালু Status.ACTIVE Enum-এর মানের সাথে যুক্ত হয়েছে কারণ আমরা @SerializedName ব্যবহার করেছি।


সারসংক্ষেপ:

  1. ডিফল্ট Enum সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন: Gson Enum এর জন্য ডিফল্ট সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন সমর্থন করে।
  2. কাস্টম সিরিয়ালাইজেশন: JsonSerializer ইন্টারফেস ব্যবহার করে Enum এর কাস্টম সিরিয়ালাইজেশন করতে পারেন।
  3. কাস্টম ডেসিরিয়ালাইজেশন: JsonDeserializer ইন্টারফেস ব্যবহার করে Enum এর কাস্টম ডেসিরিয়ালাইজেশন করতে পারেন।
  4. @SerializedName: Enum মানের জন্য JSON এর কাস্টম নাম ম্যাপ করার জন্য ব্যবহৃত হয়।

এভাবে আপনি Gson এর সাথে Enum টাইপের ডেটা কাস্টমাইজ করে JSON এ সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...