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.REDEnum-কে 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 EnumColor.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
ব্যাখ্যা:
- এই উদাহরণে
StatusEnum-এSUCCESSএবংFAILUREএর পরিবর্তে আমরা200এবং500কোড ব্যবহার করেছি। Gson এর কাস্টম Serializer এবং Deserializer-এর মাধ্যমে আমরা কাস্টম মান (যেমন200এবং500) JSON আউটপুটে ব্যবহার করেছি। - সিরিয়ালাইজেশনের সময়
Status.SUCCESSEnum কে"200"হিসেবে রূপান্তরিত করা হয়েছে, এবং ডেসিরিয়ালাইজেশনের সময়"200"থেকেStatus.SUCCESSEnum তৈরি করা হয়েছে।
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
ব্যাখ্যা:
- এখানে
JobEnum-এcodeএবংsalaryনামে দুটি প্রপার্টি আছে। - Gson কাস্টম Serializer এবং Deserializer ব্যবহার করে
codeএবংsalaryJSON ফিল্ড হিসেবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করছে।
Gson-এ Enum Serialization এবং Deserialization সহজেই করা যায়। ডিফল্টভাবে, Gson Enum নামকে JSON স্ট্রিং হিসেবে রূপান্তর করে। তবে, আপনি কাস্টম Serializer এবং Deserializer ব্যবহার করে Enum-এর কাস্টম মান এবং জটিল ডেটা কাস্টমাইজ করতে পারেন। এটা আপনাকে আরও নিয়ন্ত্রণ এবং নমনীয়তা প্রদান করে, যখন Enum-কে JSON ডেটাতে রূপান্তর করতে হয়।
Read more