Gson-এ Field Level Customization দ্বারা আপনি নির্দিষ্ট একটি ফিল্ডের জন্য কাস্টম সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন পরিচালনা করতে পারেন। এটি করার জন্য @SerializedName, @Expose, এবং @JsonAdapter এর মতো অ্যানোটেশন ব্যবহার করা যেতে পারে।
নিচে কিছু সাধারণ টেকনিক্স ব্যাখ্যা করা হয়েছে যা আপনি Gson এর ফিল্ড লেভেল কাস্টমাইজেশনের জন্য ব্যবহার করতে পারেন।
1. @SerializedName ব্যবহার করা
@SerializedName অ্যানোটেশনটি মূলত ফিল্ডের নাম পরিবর্তন করতে ব্যবহৃত হয় যখন JSON-এর ফিল্ডের নাম Java ক্লাসের ফিল্ড নামের সাথে মেলে না। এর মাধ্যমে আপনি JSON এবং Java কোডের মধ্যে নামের অমিল মেটাতে পারেন।
উদাহরণ:
import com.google.gson.annotations.SerializedName;
class Person {
@SerializedName("full_name")
private String name;
@SerializedName("age_in_years")
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা
Gson gson = new Gson();
// Java Object তৈরি করা
Person person = new Person("John Doe", 30);
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
// JSON থেকে Java Object এ কনভার্ট করা
Person personFromJson = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person: " + personFromJson.getName() + ", Age: " + personFromJson.getAge());
}
}
আউটপুট:
Serialized JSON: {"full_name":"John Doe","age_in_years":30}
Deserialized Person: John Doe, Age: 30
এখানে, @SerializedName("full_name") এবং @SerializedName("age_in_years") অ্যানোটেশন ব্যবহার করে JSON ফিল্ড নামের সাথে Java ফিল্ড নামের অমিল মেটানো হয়েছে।
2. @Expose ব্যবহার করা
@Expose অ্যানোটেশনটি আপনাকে নির্দিষ্ট ফিল্ডগুলিকে JSON সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য এক্সপোজ বা এক্সক্লুড করার সুযোগ দেয়। যদি আপনি একটি ফিল্ডকে JSON পার্সিং প্রক্রিয়া থেকে বাদ দিতে চান, তাহলে @Expose ব্যবহার করতে পারেন।
উদাহরণ:
import com.google.gson.annotations.Expose;
class Person {
@Expose
private String name;
@Expose(serialize = false, deserialize = false)
private int age; // এই ফিল্ডটি সিরিয়ালাইজ বা ডেসিরিয়ালাইজ হবে না
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); // Expose ব্যবহার
// Java Object তৈরি করা
Person person = new Person("John Doe", 30);
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
// JSON থেকে Java Object এ কনভার্ট করা
Person personFromJson = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person: " + personFromJson.getName());
}
}
আউটপুট:
Serialized JSON: {"name":"John Doe"}
Deserialized Person: John Doe
এখানে, age ফিল্ডটি @Expose(serialize = false, deserialize = false) দ্বারা বাদ দেওয়া হয়েছে, তাই এটি JSON এ সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ হয়নি।
3. @JsonAdapter ব্যবহার করা
যদি আপনি নির্দিষ্ট ফিল্ডের জন্য কাস্টম সেরিয়ালাইজার বা ডেসিরিয়ালাইজার ব্যবহার করতে চান, তবে আপনি @JsonAdapter অ্যানোটেশনটি ব্যবহার করতে পারেন। এটি কাস্টম TypeAdapter ব্যবহার করতে সাহায্য করে।
উদাহরণ:
import com.google.gson.*;
import com.google.gson.annotations.JsonAdapter;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;
// কাস্টম সেরিয়ালাইজার এবং ডেসিরিয়ালাইজার
class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
private static final String DATE_FORMAT = "yyyy-MM-dd";
@Override
public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
return new JsonPrimitive(sdf.format(date));
}
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
try {
return sdf.parse(json.getAsString());
} catch (Exception e) {
throw new JsonParseException("Invalid date format", e);
}
}
}
class Person {
private String name;
@JsonAdapter(DateAdapter.class) // কাস্টম অ্যাডাপ্টার ব্যবহার
private Date birthDate;
public Person(String name, Date birthDate) {
this.name = name;
this.birthDate = birthDate;
}
public String getName() {
return name;
}
public Date getBirthDate() {
return birthDate;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা
Gson gson = new Gson();
// Java Object তৈরি করা
Person person = new Person("John Doe", new Date());
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
// JSON থেকে Java Object এ কনভার্ট করা
Person personFromJson = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person: " + personFromJson.getName() + ", Birth Date: " + personFromJson.getBirthDate());
}
}
আউটপুট:
Serialized JSON: {"name":"John Doe","birthDate":"2024-12-19"}
Deserialized Person: John Doe, Birth Date: Thu Dec 19 14:56:34 UTC 2024
এখানে, @JsonAdapter(DateAdapter.class) ব্যবহার করা হয়েছে, যা birthDate ফিল্ডের জন্য কাস্টম DateAdapter অ্যাডাপ্টার নির্ধারণ করে।
Gson-এ Field Level Customization আপনাকে JSON পার্সিং এবং সিরিয়ালাইজেশনে আরো নমনীয়তা দেয়। @SerializedName, @Expose, এবং @JsonAdapter অ্যানোটেশন ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডগুলির জন্য কাস্টমাইজেশন পরিচালনা করতে পারেন।
Read more