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ụ.

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ã
- Tạo một lớp có tên Hướng dẫn có 2 thuộc tính là ID và Tên
- 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.
- 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
- 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
Code Giải trình:-
- 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.
- 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
Code Giải trình:-
- Đầ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.
- 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.
- 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.
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:-
- Chúng tôi tạo ra đối tượng “dòng” để mở file example.txt ở chế độ chỉ đọc.
- 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.
- 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: -
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




