Immutable Data Structure এর জন্য Custom Serializer

Gson এবং Immutable Object হ্যান্ডলিং - জিসন (Gson) - Java Technologies

397

Immutable Data Structures (যেমন, অবজেক্টগুলো যেগুলোর ফিল্ড একবার সেট করার পর পরিবর্তন করা যায় না) এর জন্য Custom Serializer তৈরি করতে হলে, আপনাকে Gson ব্যবহার করে একটি কাস্টম TypeAdapter বা JsonSerializer তৈরি করতে হবে। Immutable অবজেক্টে সাধারণত final ফিল্ড থাকে, এবং এগুলোর মান কখনও পরিবর্তন হয় না। Gson এর সাহায্যে, আপনি একটি Immutable অবজেক্টকে JSON এ রূপান্তর (serialization) করতে পারবেন এবং আবার JSON থেকে Java অবজেক্টে রূপান্তর (deserialization) করতে পারবেন, তবে Immutable অবজেক্টের ক্ষেত্রে কিছু অতিরিক্ত কনফিগারেশন প্রয়োজন হয়।

Immutable Data Structure-এর জন্য Custom Serializer

ধরা যাক, আপনি একটি Person ক্লাস তৈরি করেছেন যেটি একটি Immutable ক্লাস (যার ফিল্ডগুলো final):

Step 1: Immutable Person ক্লাস তৈরি করা

public class Person {
    private final String name;
    private final int age;
    private final String email;

    // Constructor
    public Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    // Getters
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getEmail() {
        return email;
    }
}

এখানে, Person ক্লাসটি Immutable, কারণ এর ফিল্ডগুলো final এবং শুধুমাত্র কনস্ট্রাক্টর দ্বারা সেট করা হয়।

Step 2: Custom JsonSerializer তৈরি করা

Immutable অবজেক্টের জন্য একটি Custom Serializer তৈরি করতে, আপনাকে JsonSerializer ইন্টারফেস ইমপ্লিমেন্ট করতে হবে। এই Serializer একটি Immutable Person অবজেক্টকে JSON-এ কনভার্ট করবে।

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

public class PersonSerializer implements JsonSerializer<Person> {

    @Override
    public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("name", person.getName());
        jsonObject.addProperty("age", person.getAge());
        jsonObject.addProperty("email", person.getEmail());
        return jsonObject;
    }
}

এখানে, PersonSerializer ক্লাসটি JsonSerializer ইন্টারফেস ইমপ্লিমেন্ট করে এবং serialize() মেথডের মাধ্যমে Person অবজেক্টকে JSON এ রূপান্তর করে।

Step 3: GsonBuilder দিয়ে Serializer রেজিস্টার করা

এখন, আমরা GsonBuilder ব্যবহার করে আমাদের Custom Serializer রেজিস্টার করব।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // GsonBuilder দিয়ে Gson তৈরি করা
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new PersonSerializer()) // Custom Serializer রেজিস্টার করা
                        .create();

        // Immutable Person অবজেক্ট তৈরি করা
        Person person = new Person("John Doe", 30, "john.doe@example.com");

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

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

Step 4: Output

এখন যদি আপনি Person অবজেক্টটি JSON-এ রূপান্তর করেন, তাহলে আউটপুট হবে:

{"name":"John Doe","age":30,"email":"john.doe@example.com"}

Step 5: Custom Deserializer (Optional)

যেহেতু আপনি Immutable অবজেক্টের জন্য Custom Serializer তৈরি করেছেন, একইভাবে আপনি একটি Custom Deserializer তৈরি করতে পারেন, যা JSON থেকে Immutable অবজেক্টে রূপান্তর করবে।

import com.google.gson.*;

import java.lang.reflect.Type;

public class PersonDeserializer implements JsonDeserializer<Person> {

    @Override
    public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("name").getAsString();
        int age = jsonObject.get("age").getAsInt();
        String email = jsonObject.get("email").getAsString();

        return new Person(name, age, email);  // Person অবজেক্টে রূপান্তর করা
    }
}

এখন, GsonBuilder এর মাধ্যমে আপনি PersonDeserializer কে register করে JSON ডেটাকে Person অবজেক্টে রূপান্তর করতে পারবেন।

Gson gson = new GsonBuilder()
                .registerTypeAdapter(Person.class, new PersonSerializer())   // Custom Serializer
                .registerTypeAdapter(Person.class, new PersonDeserializer()) // Custom Deserializer
                .create();

String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"john.doe@example.com\"}";

// JSON থেকে Person অবজেক্টে রূপান্তর
Person personFromJson = gson.fromJson(json, Person.class);
System.out.println(personFromJson.getName());

Output:

John Doe

বিস্তারিত ব্যাখ্যা:

  1. Custom Serializer: এখানে PersonSerializer ক্লাসটি JSON-এ রূপান্তর করতে কাজ করেছে। serialize() মেথডটি Person অবজেক্টের final ফিল্ডগুলোর মান JSON অবজেক্টে সেট করে।
  2. Custom Deserializer (Optional): যদি আপনি JSON থেকে Immutable অবজেক্টে রূপান্তর করতে চান, তবে Custom Deserializer তৈরি করতে হবে, যেখানে JSON ডেটার বিভিন্ন প্রপার্টি থেকে মান নিয়ে একটি Immutable অবজেক্ট তৈরি করা হয়।
  3. GsonBuilder: GsonBuilder ব্যবহার করে আমরা Custom Serializer এবং Custom Deserializer রেজিস্টার করেছি, যাতে Gson JSON ডেটা প্রক্রিয়া করতে পারে।

সংক্ষেপে:

  • Immutable Data Structure এর জন্য Custom Serializer তৈরি করতে JsonSerializer ব্যবহার করা হয়।
  • Immutable অবজেক্টে final ফিল্ড থাকে, যেগুলোর মান কনস্ট্রাক্টরের মাধ্যমে সেট করা হয় এবং এগুলোর মান পরিবর্তন হয় না।
  • Gson এর Custom Serializer এবং Custom Deserializer ব্যবহার করে Immutable Data Structures কে JSON এবং Java অবজেক্টে রূপান্তর করা যায়।
Content added By
Promotion

Are you sure to start over?

Loading...