Tuần tự hóa và giải tuần tự hóa trong C# với ví dụ

⚡ Tóm tắt thông minh

Trong C#, quá trình tuần tự hóa (serialization) chuyển đổi một đối tượng thành một luồng byte để có thể lưu vào tệp hoặc gửi giữa các ứng dụng; quá trình giải tuần tự hóa (deserialization) xây dựng lại đối tượng đó. Ở đây, bạn sẽ học cách tuần tự hóa và giải tuần tự hóa các đối tượng với các ví dụ.

  • 🔄 Những gì nó là: Quá trình tuần tự hóa ghi một đối tượng C# vào một tệp, và quá trình giải tuần tự hóa đọc lại đối tượng đó.
  • 🏷️ [Có thể tuần tự hóa]: Một lớp cần có thuộc tính [Serializable] trước khi nó có thể được tuần tự hóa.
  • 💾 Định dạng nhị phân: BinaryFormatter với FileStream ghi đối tượng dưới dạng nhị phân.
  • 🧩 Các định dạng: C# cũng hỗ trợ tuần tự hóa XML và JSON để xuất ra định dạng dễ đọc.
  • 🤖 Hỗ trợ từ AI: Các công cụ AI như GitHub Copilot tạo mã tuần tự hóa ngay lập tức.

C# Serialization và Deserialization

Tuần tự hóa và giải tuần tự hóa trong C#

Khái niệm về tuần tự hóa (serialization) và giải tuần tự hóa (deserialization) được sử dụng bất cứ khi nào dữ liệu liên quan đến các đối tượng cần được gửi từ ứng dụng này sang ứng dụng khác. Tuần tự hóa được sử dụng để xuất dữ liệu ứng dụng vào một tệp. Ứng dụng đích sau đó sử dụng giải tuần tự hóa để xuất dữ liệu.tracThu thập dữ liệu từ ứng dụng để sử dụng tiếp.

Tuần tự hóa là một khái niệm trong đó các đối tượng lớp C# được ghi hoặc tuần tự hóa thành các tệp. Giả sử bạn có một lớp C# tên là Tutorial. Và lớp có 2 thuộc tính là ID và tên Tutorials.

Việc tuần tự hóa có thể được sử dụng để ghi trực tiếp các thuộc tính dữ liệu của lớp Hướng dẫn vào một tệp. Quá trình khử tuần tự được sử dụng để đọc dữ liệu từ tệp và xây dựng lại đối tượng Hướng dẫn.

Các loại tuần tự hóa trong C#

C# hỗ trợ nhiều định dạng tuần tự hóa, và bạn sẽ chọn một định dạng dựa trên nơi dữ liệu sẽ được sử dụng. Các loại chính được liệt kê bên dưới.

  • tuần tự hóa nhị phân Nó chuyển đổi một đối tượng thành một luồng nhị phân nhỏ gọn. Quá trình này nhanh nhưng không dễ đọc đối với con người và phụ thuộc vào .NET.
  • chuyển đổi XML thành chuỗi XML Sử dụng lớp XmlSerializer để ghi các thuộc tính công khai của một đối tượng vào một tệp XML dễ đọc.
  • chuyển đổi JSON Sử dụng System.Text.Json hoặc Newtonsoft.Json để tạo ra JSON nhẹ, định dạng phổ biến nhất cho các API web.
  • tuần tự hóa SOAP Định dạng dữ liệu dưới dạng thông điệp SOAP cho các dịch vụ web cũ hơn.

Cách tuần tự hóa một đối tượng trong C#

Hãy xem một ví dụ về cách chúng ta có thể đạt được điều này.

Trong ví dụ của chúng tôi, chúng tôi sẽ thực hiện các bước cấp cao bên dưới trong mã

  1. Tạo một lớp có tên Hướng dẫn có 2 thuộc tính là ID và Tên
  2. Sau đó, chúng ta sẽ tạo một đối tượng từ lớp và gán giá trị “1” cho thuộc tính ID và giá trị “.Net” cho thuộc tính name.
  3. Sau đó chúng ta sẽ sử dụng tính năng tuần tự hóa để tuần tự hóa đối tượng trên thành một tệp có tên là example.txt
  4. Cuối cùng, chúng ta sẽ sử dụng tính năng deserialization để deserialize đối tượng khỏi file và hiển thị các giá trị trong Console.

Nhập mã bên dưới vào tệp chương trình.cs của ứng dụng bảng điều khiển.

Bước 1) Thêm lớp học.

Bước đầu tiên là thêm lớp sẽ được sử dụng để tuần tự hóa

Tuần tự hóa một đối tượng trong C#

Code Giải trình:-

  1. Lớp cần được tuần tự hóa cần phải có thuộc tính [Serializable]. Đây là một từ khóa trong C#. Từ khóa này sau đó được gắn vào lớp Hướng dẫn. Nếu bạn không đề cập đến thuộc tính này, bạn sẽ gặp lỗi khi cố gắng sắp xếp thứ tự lớp.
  2. Tiếp theo là định nghĩa của lớp sẽ được tuần tự hóa. Ở đây chúng tôi đang xác định một lớp có tên là “Hướng dẫn” và cung cấp 2 thuộc tính, một là “ID” và thuộc tính còn lại là “Tên”.

Bước 2) Tạo đối tượng.

Trong bước này, đầu tiên chúng ta sẽ tạo đối tượng của lớp Tutorial và tuần tự hóa nó thành tệp có tên example.txt

Tuần tự hóa một đối tượng trong C#

Code Giải trình:-

  1. Đầu tiên chúng ta tạo một đối tượng của lớp Tutorial. Sau đó, chúng tôi gán giá trị “1” cho ID và “.net” cho thuộc tính tên.
  2. Sau đó, chúng tôi sử dụng lớp định dạng được sử dụng để tuần tự hóa hoặc chuyển đổi đối tượng sang định dạng nhị phân. Dữ liệu trong tệp được tuần tự hóa được thực hiện ở định dạng nhị phân. Tiếp theo, chúng ta tạo một đối tượng luồng tệp. Đối tượng luồng tệp được sử dụng để mở tệp example.txt nhằm mục đích ghi. Các từ khóa FileMode.Create và FileMode.Write được sử dụng để đề cập cụ thể rằng tệp nên được mở cho mục đích ghi.
  3. Cuối cùng, chúng ta sử dụng phương thức Serialize để truyền dữ liệu nhị phân vào file. Sau đó chúng tôi đóng luồng vì ghi hoạt động hoàn tất.

Bước 3) Sử dụng quá trình khử lưu huỳnh.

Cuối cùng, để đảm bảo rằng dữ liệu có trong tệp, chúng tôi sử dụng quá trình giải tuần tự hóa để giải tuần tự hóa đối tượng khỏi tệp.

Tuần tự hóa một đối tượng trong C#

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Chúng tôi tạo ra đối tượng “dòng” để mở file example.txt ở chế độ chỉ đọc.
  2. Sau đó, chúng tôi sử dụng lớp định dạng được sử dụng để giải tuần tự hóa đối tượng được lưu trữ trong tệp example.txt. Đối tượng được trả về được đặt thành đối tượng objnew.
  3. Cuối cùng, chúng tôi hiển thị các thuộc tính của đối tượng “objnew” trên bảng điều khiển bằng cách sử dụng thuộc tính “ID” và “name”.

Khi mã trên được đặt và dự án được chạy bằng cách sử dụng Visual Studio, bạn sẽ nhận được kết quả đầu ra dưới đây.

Đầu ra: -

Tuần tự hóa một đối tượng trong C#

Bạn có thể thấy từ kết quả đầu ra ở trên rằng các giá trị từ tệp đã được giải tuần tự hóa đúng cách và hiển thị trong bảng điều khiển.

Chuyển đổi JSON thành chuỗi trong C#

JSON là định dạng được sử dụng rộng rãi nhất cho các ứng dụng hiện đại và API web. Tính năng tích hợp sẵn... System.Text.Json Namespace thực hiện tuần tự hóa và giải tuần tự hóa các đối tượng chỉ bằng một lệnh gọi phương thức duy nhất, như minh họa bên dưới.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

Đầu ra:

{"ID":1,"Name":".Net"}
.Net

Câu Hỏi Thường Gặp

Quá trình tuần tự hóa chuyển đổi một đối tượng C# thành một luồng byte (nhị phân, XML hoặc JSON) để có thể lưu vào tệp hoặc gửi đến ứng dụng khác. Quá trình giải tuần tự hóa xây dựng lại đối tượng từ dữ liệu đó.

Thuộc tính [Serializable] đánh dấu một lớp để các đối tượng của nó có thể được tuần tự hóa. Nếu không có thuộc tính này, quá trình tuần tự hóa nhị phân sẽ ném ra một ngoại lệ khi bạn cố gắng ghi đối tượng vào một tệp.

C# hỗ trợ tuần tự hóa nhị phân (dạng nhỏ gọn, chỉ dành cho .NET), tuần tự hóa XML thông qua XmlSerializer, tuần tự hóa JSON thông qua System.Text.Json và tuần tự hóa SOAP cho các dịch vụ web cũ hơn.

Quá trình tuần tự hóa ghi dữ liệu của một đối tượng vào một tệp hoặc luồng, trong khi quá trình giải tuần tự hóa đọc lại dữ liệu đó và tái tạo lại đối tượng gốc trong bộ nhớ.

BinaryFormatter hiện đã lỗi thời và được coi là không an toàn vì nó có thể thực thi mã độc hại trong quá trình giải mã dữ liệu. Microsoft Khuyến nghị sử dụng System.Text.Json hoặc XmlSerializer cho các ứng dụng mới.

Các trợ lý AI như GitHub Copilot tự động hoàn thành các lệnh Serialize và Deserialize, thêm thuộc tính [Serializable] và tạo mã tuần tự hóa JSON hoặc XML từ một bình luận ngắn.

Đúng vậy. Các công cụ hỗ trợ bởi trí tuệ nhân tạo sẽ tạo ra các lớp mô hình, lựa chọn giữa các định dạng JSON, XML và nhị phân, đồng thời thêm chức năng xử lý lỗi để mã tuần tự hóa của bạn được an toàn và đầy đủ.

Việc tuần tự hóa nhị phân sử dụng System.Runtime.Serialization.Formatters.Binary, JSON sử dụng System.Text.Json, và XML sử dụng System.Xml.Serialization.

Tóm tắt bài viết này với: