Under Construction

Prometheus Lab

Portfolio & Resources

Back to Blog
Unity10 min14 views

Serialization

Author

Minh Khoa

Author

🧩 1️⃣ Định nghĩa ngắn gọn

Serialization là quá trình chuyển một đối tượng (object) trong chương trình

→ thành dữ liệu có thể lưu trữ hoặc truyền đi được (chuỗi, file, byte, JSON, v.v.)

Và ngược lại, Deserialization là quá trình chuyển dữ liệu đó trở lại thành object.


💬 Cách nói dễ hiểu:

Serialization = “Đóng gói object thành dữ liệu có thể lưu hoặc gửi đi.”

Deserialization = “Mở gói dữ liệu đó thành object để dùng lại.”


🧱 2️⃣ Ví dụ ngoài đời

  • Serialization giống như bạn chụp lại một nhân vật game → lưu vào file .save.
  • Deserialization là lúc game load lại file đó → nhân vật xuất hiện đúng như cũ (level, item, HP...).

🧠 3️⃣ Trong lập trình, tại sao cần serialization?

Tình huống Mục đích 💾 Lưu dữ liệu (Save/Load) Ghi object thành file JSON, Binary, XML, v.v. 🌐 Truyền dữ liệu qua mạng Gửi object từ client → server (hoặc ngược lại). ☁️ API / Database / Cloud Chuyển object thành JSON để REST API xử lý. 🧩 Unity Editor Unity serialize dữ liệu để hiển thị & lưu trong scene. 🧠 Cache hoặc file config Lưu tạm cấu hình hoặc dữ liệu gameplay.


⚙️ 4️⃣ Cách hoạt động

Ví dụ với C#:

[System.Serializable]
public class PlayerData {
    public string name;
    public int level;
    public float hp;
}

➕ Serialize (Lưu thành JSON)

PlayerData player = new PlayerData { name = "Na", level = 5, hp = 99.5f };
string json = JsonUtility.ToJson(player);
Debug.Log(json);

Kết quả:

{"name":"Na","level":5,"hp":99.5}

🔄 Deserialize (Đọc lại object)

PlayerData loaded = JsonUtility.FromJson<PlayerData>(json);
Debug.Log(loaded.name); // "Na"

➡️ Từ JSON → lại thành object PlayerData có thể dùng trong code.


🧰 5️⃣ Serialization trong Unity

Unity serialize tất cả dữ liệu trong scene, prefab, hoặc ScriptableObject để:

  • Lưu lại giá trị trong Editor.
  • Hiển thị trong Inspector.
  • Lưu vào file .unity, .prefab, .asset khi bạn bấm Save.

🧩 Unity chỉ serialize được:

image.png---

🔧 Ví dụ Unity

[System.Serializable]
public class InventoryItem {
    public string itemName;
    public int amount;
}

public class PlayerInventory : MonoBehaviour {
    [SerializeField] private List<InventoryItem> items; // hiển thị & lưu trong Inspector
}

→ Unity sẽ serialize list này vào file scene hoặc prefab,

nên khi reload scene, dữ liệu vẫn y nguyên.


🧠 6️⃣ Có mấy kiểu serialization phổ biến?

Kiểu Mô tả Ví dụ JSON Serialization Dạng text, dễ đọc, phổ biến nhất {"name":"Na","hp":100} Binary Serialization Nhanh hơn, nhỏ hơn, khó đọc Dùng cho file .save hoặc .dat XML Serialization Dạng text có tag <Player><Name>Na</Name></Player> Custom Serialization Tự định nghĩa đọc/ghi riêng Dùng trong Unity Editor Tools


💾 7️⃣ Ví dụ thực tế – Game Save System (Unity)

Lưu game:

void SaveGame(PlayerData data) {
    string json = JsonUtility.ToJson(data);
    File.WriteAllText(Application.persistentDataPath + "/save.json", json);
}

Load game:

PlayerData LoadGame() {
    string json = File.ReadAllText(Application.persistentDataPath + "/save.json");
    return JsonUtility.FromJson<PlayerData>(json);
}

➡️ Tự động lưu toàn bộ thông tin người chơi → đọc lại khi khởi động game.


🧩 8️⃣ Lợi ích & Rủi ro

✅ Ưu điểm:

  • Dễ dàng lưu / truyền object.
  • Hỗ trợ nhiều định dạng phổ biến (JSON, binary, XML).
  • Dễ debug & đọc file JSON.
  • Rất quan trọng trong network, save, hoặc editor tools.

❌ Nhược điểm:

  • Không phải loại nào cũng serialize được (VD: delegate, event, object phức tạp).
  • Dữ liệu dễ chỉnh sửa (nếu JSON → có thể bị cheat).
  • Binary khó tương thích giữa version khác nhau.
  • Cần bảo mật khi dùng online (hash, encrypt).