C# C-Sharp คือ ตอนที่ 8 : ไฟล์ I/O และการทำให้เป็นอนุกรม (Serialization)

  1. ทำความเข้าใจเกี่ยวกับการดำเนินการ I/O ของไฟล์ (File I/O Operations)
    1.1 การอ่าน (Reading) และเขียน (Writing) ไฟล์ (Files)
    1.2 การจัดการไดเร็กทอรี (Directories) และไฟล์ (Files)
  2. ทำความเข้าใจเกี่ยวกับการทำให้เป็นอนุกรม (Serialization)
    2.1 การทำให้เป็นอนุกรมไบนารี (Binary Serialization)
    2.2 การทำให้เป็นอนุกรม JSON

การทำแอพเป็นกระบวนการที่ครอบคลุมซึ่งเกี่ยวข้องกับประเด็นสำคัญต่างๆ หนึ่งในองค์ประกอบหลักของกระบวนการทำแอพคือการจัดการข้อมูล ข้อมูลมีบทบาทสำคัญ และการจัดการอย่างมีประสิทธิภาพเป็นสิ่งสำคัญยิ่ง ใน C# นักพัฒนาสามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพผ่านการดำเนินการ File Input/Output (I/O) และการทำให้เป็นอนุกรม บทความนี้แสดงภาพรวมเชิงลึกของแนวคิดเหล่านี้ โดยเฉพาะอย่างยิ่งการทำแอพ

1. ทำความเข้าใจเกี่ยวกับการดำเนินการ I/O ของไฟล์ (File I/O Operations)

ไฟล์ I/O เป็นหนึ่งในส่วนที่สำคัญที่สุดของซอฟต์แวร์หรือแอปพลิเคชันใดๆ ช่วยให้คุณสามารถอ่านและเขียนไฟล์ ซึ่งเป็นสิ่งสำคัญสำหรับการจัดเก็บและดึงข้อมูล ใน C# เนมสเปซ System.IO มีคลาสและเมธอดต่างๆ เพื่อดำเนินการกับไฟล์ I/O

1.1 การอ่าน (Reading) และเขียน (Writing) ไฟล์ (Files)

ใน C# คุณสามารถใช้คลาสStreamReaderและStreamWriterคลาสเพื่ออ่านและเขียนลงในไฟล์ตามลำดับ คลาสเหล่านี้เป็นส่วนหนึ่งของSystem.IOเนมสเปซ

นี่คือตัวอย่างพื้นฐานในการเขียนไฟล์:

using System.IO;

StreamWriter writer = new StreamWriter("test.txt");
writer.WriteLine("Hello, World!");
writer.Close();

ในโค้ดด้านบนStreamWriterมีการสร้างวัตถุใหม่ซึ่งเปิดไฟล์ “test.txt” จากนั้นใช้ วิธีWriteLineเขียนสตริง “Hello, World!” ไปที่ไฟล์. สุดท้ายCloseเมธอดนี้ถูกเรียกให้ปิดไฟล์และปล่อยทรัพยากรระบบที่เกี่ยวข้องกับตัวเขียน

การอ่านจากไฟล์นั้นง่ายมาก:

using System.IO;

StreamReader reader = new StreamReader("test.txt");
string content = reader.ReadToEnd();
reader.Close();

Console.WriteLine(content);

ในโค้ดนี้StreamReaderวัตถุจะเปิดขึ้นสำหรับ “test.txt” และReadToEndใช้วิธีอ่านเนื้อหาทั้งหมดของไฟล์เป็นสตริง จากนั้นไฟล์จะปิด และเนื้อหาจะถูกพิมพ์ไปยังคอนโซล

1.2 การจัดการไดเร็กทอรี (Directories) และไฟล์ (Files)

C# ยังจัดเตรียม คลาส DirectoryและFileสำหรับจัดการไดเร็กทอรีและไฟล์ตามลำดับ คลาสDirectoryนำเสนอเมธอดแบบสแตติกสำหรับการสร้าง ย้าย และแจกแจงผ่านไดเร็กทอรีและไดเร็กทอรีย่อย ในขณะเดียวกันFileคลาสจะจัดเตรียมเมธอดแบบสแตติกสำหรับการสร้าง คัดลอก ลบ ย้าย และเปิดไฟล์ และช่วยในการสร้างStreamReaderและStreamWriterอ็อบเจกต์

2. ทำความเข้าใจเกี่ยวกับการทำให้เป็นอนุกรม (Serialization)

แม้ว่าการดำเนินการ I/O ของไฟล์จะมีความสำคัญ แต่อนุญาตให้อ่านและเขียนข้อมูลข้อความเท่านั้น แต่ถ้าคุณต้องการจัดเก็บหรือส่งโครงสร้างข้อมูลที่ซับซ้อนมากขึ้น เช่น อ็อบเจกต์ล่ะ นั่นคือที่มาของการทำให้เป็นอนุกรม

การทำให้เป็นอนุกรมเป็นกระบวนการแปลงสถานะของออบเจกต์เป็นไบต์สตรีม ซึ่งสามารถคงอยู่ในสื่อจัดเก็บข้อมูล เช่น ไฟล์ หรือส่งผ่านเครือข่ายได้ การดีซีเรียลไลเซชันเป็นกระบวนการย้อนกลับ โดยจะแปลงสตรีมไบต์กลับเป็นวัตถุ

ใน C# การทำให้เป็นอนุกรมสามารถทำได้โดยใช้รูปแบบต่างๆ รวมถึงไบนารี XML หรือ JSON .NET Framework มีคลาสที่แตกต่างกันสำหรับแต่ละรูปแบบเหล่านี้

2.1 การทำให้เป็นอนุกรมไบนารี (Binary Serialization)

การทำให้เป็นอนุกรมแบบไบนารีจะรักษาวัตถุและแอตทริบิวต์ในรูปแบบไบนารีแบบกะทัดรัด นี่คือตัวอย่างวิธีการทำซีเรียลไลซ์แบบไบนารี:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Person person = new Person { Name = "John Doe", Age = 30 };

BinaryFormatter formatter = new BinaryFormatter();
using (Stream stream = new FileStream("Person.bin", FileMode.Create, FileAccess.Write))
{
    formatter.Serialize(stream, person);
}

ในโค้ดนี้Personคลาสจะถูกทำเครื่องหมายด้วย[Serializable]แอตทริบิวต์เพื่อระบุว่าสามารถต่ออนุกรมได้ วัตถุPersonจะถูกสร้างขึ้นและซีเรียลไลซ์โดยใช้ไฟล์BinaryFormatter. วัตถุที่ต่อเนื่องถูกเขียนไปยังไฟล์ “Person.bin”

การดีซีเรียลไลเซชันจะเป็นดังนี้:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

BinaryFormatter formatter = new BinaryFormatter();
using (Stream stream = new FileStream("Person.bin", FileMode.Open, FileAccess.Read))
{
    Person person = (Person)formatter.Deserialize(stream);
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}

ที่นี่BinaryFormatterใช้อีกครั้ง คราวนี้เพื่อยกเลิกการซีเรียลไลซ์ข้อมูลจากไฟล์ “Person.bin” กลับเข้าไปในPersonวัตถุ

2.2 การทำให้เป็นอนุกรม JSON

ในการทำแอพสมัยใหม่ JSON ได้กลายเป็นหนึ่งในรูปแบบข้อมูลที่ใช้กันอย่างแพร่หลาย อ่านง่าย น้ำหนักเบา และใช้งานง่าย เนSystem.Text.Jsonมสเปซมีฟังก์ชันสำหรับการซีเรียลไลซ์และดีซีเรียลไลซ์จาก JSON

using System;
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Person person = new Person { Name = "John Doe", Age = 30 };

string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString);

ในตัวอย่างนี้Personอ็อบเจ็กต์ถูกทำให้เป็นอนุกรมกับสตริง JSON โดยใช้JsonSerializer.Serializeเมธอด JSON ผลลัพธ์จะถูกพิมพ์ไปยังคอนโซล

หากต้องการ deserialize JSON กลับเป็นPersonวัตถุ คุณจะใช้JsonSerializer.Deserializeวิธีการ:

using System;
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

string jsonString = "{\"Name\":\"John Doe\",\"Age\":30}";
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

การทำความเข้าใจไฟล์ I/O และการทำให้เป็นซีเรียลไลเซชันใน C# เป็นทักษะที่สำคัญสำหรับการทำแอพ ความสามารถเหล่านี้ทำให้คุณสามารถบันทึกและโหลดข้อมูล ไม่ว่าจะเป็นข้อความธรรมดา วัตถุที่ซับซ้อน หรือในรูปแบบยอดนิยมอย่าง JSON ความเข้าใจนี้เป็นรากฐานที่สำคัญของการจัดการข้อมูลอย่างมีประสิทธิภาพและประสิทธิผลในแอปพลิเคชันของคุณ

ในฐานะนักพัฒนาแอปพลิเคชัน จำเป็นอย่างยิ่งที่จะต้องมีทักษะเหล่านี้ในกล่องเครื่องมือของคุณ เปิดโอกาสใหม่ๆ สำหรับแอปพลิเคชันของคุณ เช่น การคงข้อมูลผู้ใช้ในเซสชันต่างๆ การแชร์ข้อมูลระหว่างระบบต่างๆ หรือแม้กระทั่งการจัดเก็บข้อมูลสำหรับการใช้งานแบบออฟไลน์ ทำให้มั่นใจได้ว่าคุณสามารถทำแอพที่แข็งแกร่ง ยืดหยุ่น และมีประสิทธิภาพสูงได้


C# C-Sharp คืออะไร

C# C-Sharp คือ ตอนที่ 7 : คอลเลกชัน (Collections)และ Generics
C# C-Sharp คือ ตอนที่ 9 : การเขียนโปรแกรมแบบมัลติเธรด (Multithreading) และอะซิงโครนัส (Asynchronous)