জটিল অবজেক্ট সিরিয়ালাইজেশন প্রযুক্তি (Complex Object Serialization Techniques) in Dart
Dart-এ জটিল অবজেক্টগুলি যেমন নেস্টেড অবজেক্ট বা লিস্ট সম্বলিত অবজেক্টের সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া করার জন্য কিছু প্রযুক্তি প্রয়োজন। এখানে জটিল অবজেক্ট সিরিয়ালাইজেশন করার জন্য বিভিন্ন কৌশল আলোচনা করা হলো।
১. নেস্টেড অবজেক্ট সিরিয়ালাইজেশন
যখন একটি অবজেক্টে অন্য অবজেক্ট থাকে (নেস্টেড স্ট্রাকচার), তখন প্রতিটি ক্লাসের জন্য সিরিয়ালাইজেশন মেথড তৈরি করতে হবে।
উদাহরণ: নেস্টেড অবজেক্ট সিরিয়ালাইজেশন
import 'dart:convert';
// Address ক্লাস
class Address {
String street;
String city;
Address({required this.street, required this.city});
Map<String, dynamic> toJson() {
return {
'street': street,
'city': city,
};
}
factory Address.fromJson(Map<String, dynamic> json) {
return Address(
street: json['street'],
city: json['city'],
);
}
}
// User ক্লাস
class User {
String name;
int age;
Address address; // নেস্টেড অবজেক্ট
User({required this.name, required this.age, required this.address});
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'address': address.toJson(), // নেস্টেড অবজেক্টকে সিরিয়ালাইজ করা
};
}
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
address: Address.fromJson(json['address']), // নেস্টেড অবজেক্টকে ডেসিরিয়ালাইজ করা
);
}
}
void main() {
// User অবজেক্ট তৈরি
User user = User(
name: 'Alice',
age: 30,
address: Address(street: '123 Main St', city: 'Somewhere'),
);
// অবজেক্টকে JSON-এ রূপান্তর করা
String jsonString = jsonEncode(user.toJson());
print('Serialized JSON: $jsonString');
// JSON থেকে অবজেক্টে রূপান্তর করা
User newUser = User.fromJson(jsonDecode(jsonString));
print('Name: ${newUser.name}, Age: ${newUser.age}, Street: ${newUser.address.street}');
}
২. অবজেক্টের তালিকা সিরিয়ালাইজেশন
যখন অবজেক্টের তালিকা থাকে, তখন তালিকাটিকে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য মেথড তৈরি করতে হবে।
উদাহরণ: অবজেক্টের তালিকা সিরিয়ালাইজেশন
class Course {
String title;
int credits;
Course({required this.title, required this.credits});
Map<String, dynamic> toJson() {
return {
'title': title,
'credits': credits,
};
}
factory Course.fromJson(Map<String, dynamic> json) {
return Course(
title: json['title'],
credits: json['credits'],
);
}
}
class Student {
String name;
List<Course> courses; // অবজেক্টের তালিকা
Student({required this.name, required this.courses});
Map<String, dynamic> toJson() {
return {
'name': name,
'courses': courses.map((course) => course.toJson()).toList(), // তালিকাকে সিরিয়ালাইজ করা
};
}
factory Student.fromJson(Map<String, dynamic> json) {
return Student(
name: json['name'],
courses: (json['courses'] as List)
.map((courseJson) => Course.fromJson(courseJson))
.toList(), // তালিকাকে ডেসিরিয়ালাইজ করা
);
}
}
void main() {
// Student অবজেক্ট তৈরি
Student student = Student(
name: 'Bob',
courses: [
Course(title: 'Math', credits: 3),
Course(title: 'Science', credits: 4),
],
);
// অবজেক্টকে JSON-এ রূপান্তর করা
String jsonString = jsonEncode(student.toJson());
print('Serialized JSON: $jsonString');
// JSON থেকে অবজেক্টে রূপান্তর করা
Student newStudent = Student.fromJson(jsonDecode(jsonString));
print('Deserialized Student: ${newStudent.name}, Courses: ${newStudent.courses.map((course) => course.title).toList()}');
}
৩. ঐচ্ছিক ফিল্ডগুলি পরিচালনা করা
যখন আপনার মডেল ক্লাসে ঐচ্ছিক ফিল্ড থাকে, তখন সেগুলি সঠিকভাবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে হবে।
উদাহরণ: ঐচ্ছিক ফিল্ড
class User {
String name;
int age;
String? email; // ঐচ্ছিক ফিল্ড
User({required this.name, required this.age, this.email});
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'email': email, // শুধুমাত্র যদি null না হয়
};
}
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
email: json['email'], // ঐচ্ছিক ফিল্ডের জন্য
);
}
}
৪. কাস্টম সিরিয়ালাইজেশন লজিক
যদি আপনাকে জটিল ডেটা টাইপের জন্য কাস্টম সিরিয়ালাইজেশন লজিক তৈরি করতে হয়, তখন এটি করতে পারেন।
উদাহরণ: কাস্টম সিরিয়ালাইজেশন লজিক
class User {
String name;
int age;
List<int> scores;
User({required this.name, required this.age, required this.scores});
// কাস্টম সিরিয়ালাইজেশন লজিক
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'scores': scores.join(','), // তালিকাকে কমা দ্বারা পৃথক স্ট্রিংয়ে রূপান্তর করা
};
}
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
scores: (json['scores'] as String).split(',').map(int.parse).toList(), // তালিকাকে পুনরুদ্ধার করা
);
}
}
উপসংহার
Dart-এ জটিল অবজেক্ট সিরিয়ালাইজেশন প্রযুক্তিগুলি কার্যকরী এবং নমনীয়। ক্লাসের উপযুক্ত সিরিয়ালাইজেশন মেথডগুলি সংজ্ঞায়িত করে, আপনি সহজেই অবজেক্টগুলিকে JSON ফরম্যাটে রূপান্তর এবং পুনরুদ্ধার করতে পারেন। এটি API-এর সাথে কাজ করার সময় ডেটা বিনিময়ের জন্য অত্যন্ত সহায়ক।