0Pricing
Learn Rust Coding · บทเรียน

การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม

มาโคร derive

การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

Serde คืออะไร

Serde (SERialize/DEserialize) คือเฟรมเวิร์กของ Rust สำหรับแปลงโครงสร้างข้อมูลไปเป็นและกลับจากรูปแบบต่าง ๆ เช่น JSON, YAML และรูปแบบอื่น ๆ

  • แกนกลางไม่ขึ้นกับรูปแบบ พร้อม crate สำหรับแต่ละรูปแบบ
  • ขับเคลื่อนด้วยมาโคร derive

การเพิ่ม serde

เพิ่ม serde พร้อมฟีเจอร์ derive และ crate สำหรับรูปแบบข้อมูล เช่น serde_json ขั้นตอนนี้จะแก้ไข Cargo.toml

[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"

การสร้างเทรตโดยอัตโนมัติ

ใส่แอตทริบิวต์ให้ struct ด้วย #[derive(Serialize, Deserialize)] เพื่อให้สามารถแปลงรูปแบบได้ แต่ละฟิลด์ต้องสามารถทำซีเรียลไลซ์ได้ด้วยตนเอง

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct User {
    id: u32,
    name: String,
}

Serialize หมายถึงการแปลงเป็นรูปแบบหนึ่ง

Serialize แปลงค่าให้เป็นไบต์หรือข้อความในรูปแบบใดรูปแบบหนึ่ง struct จะไม่ทราบว่าจะใช้รูปแบบใด แต่ crate ของรูปแบบนั้นจะเป็นผู้กำหนด

Deserialize หมายถึงการแปลงกลับจากรูปแบบหนึ่ง

Deserialize แยกวิเคราะห์ข้อความหรือไบต์กลับมาเป็นค่า Rust พร้อมตรวจสอบชนิดข้อมูลและฟิลด์ที่จำเป็นไปพร้อมกัน

จำลองการทำซีเรียลไลซ์ด้วยตนเอง

เพื่อสร้างความเข้าใจ นี่คือตัวซีเรียลไลซ์ที่เขียนขึ้นเองสำหรับ struct แบบง่าย serde จะสร้างโค้ดลักษณะนี้ให้คุณโดยอัตโนมัติ

struct User { id: u32, name: String }

fn serialize(u: &User) -> String {
    format!("id={};name={}", u.id, u.name)
}

fn main() {
    let u = User { id: 7, name: "Alice".to_string() };
    println!("{}", serialize(&u));
}

จำลองการทำดีซีเรียลไลซ์ด้วยตนเอง

และนี่คือกระบวนการย้อนกลับ: แยกวิเคราะห์ข้อความกลับมาเป็น struct โค้ดที่ serde สร้างขึ้นจะทำงานนี้ได้อย่างมีประสิทธิภาพกับหลายรูปแบบ

struct User { id: u32, name: String }

fn deserialize(s: &str) -> User {
    let parts: Vec<&str> = s.split(',').collect();
    let id = parts[0].parse().unwrap();
    let name = parts[1].to_string();
    User { id, name }
}

fn main() {
    let u = deserialize("42,Bob");
    println!("{} {}", u.id, u.name);
}

การ derive บน enum

enum ก็ใช้งานได้เช่นกัน โดยค่าเริ่มต้น แต่ละ variant จะถูกทำซีเรียลไลซ์ด้วยชื่อของตนเอง และข้อมูลใด ๆ จะถูกซ้อนอยู่ภายใน

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
enum Shape {
    Circle { radius: f64 },
    Square { side: f64 },
}

โครงสร้างซ้อนกัน

serde จะทำงานแบบเรียกซ้ำโดยอัตโนมัติ struct ที่มี struct อื่นซึ่ง derive ไว้แล้ว หรือมี Vec ก็ใช้งานได้ทันที

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Address { city: String }

#[derive(Serialize, Deserialize)]
struct Person {
    name: String,
    addresses: Vec<Address>,
}

ทำซีเรียลไลซ์อย่างเดียวหรือดีซีเรียลไลซ์อย่างเดียว

คุณสามารถ derive เพียง trait เดียวได้ เช่น ชนิดข้อมูลผลลัพธ์จาก API อาจใช้ Serialize เท่านั้น ส่วนชนิดข้อมูลคำขอขาเข้าอาจใช้ Deserialize เท่านั้น

use serde::Serialize;

#[derive(Serialize)]
struct ApiResponse {
    status: u16,
    message: String,
}

ข้อกำหนดของ derive

ชนิดของทุกฟิลด์ต้อง implement trait ที่คุณ derive ชนิดข้อมูลมาตรฐานและคอลเลกชันต่าง ๆ ทำไว้แล้ว แต่ชนิดข้อมูลแบบกำหนดเองต้อง derive ของตนเอง

use serde::Serialize;

#[derive(Serialize)]
struct Inner { x: i32 }

#[derive(Serialize)]
struct Outer { inner: Inner }

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับการทำซีเรียลไลซ์และดีซีเรียลไลซ์

สรุป

คุณได้เรียนรู้พื้นฐานของ serde:

  • serde เป็นเฟรมเวิร์กสำหรับการทำซีเรียลไลซ์และดีซีเรียลไลซ์ที่ไม่ผูกกับรูปแบบใด
  • #[derive(Serialize, Deserialize)] จะสร้างโค้ดสำหรับการแปลงให้
  • ใช้งานได้กับ struct, enum และชนิดข้อมูลที่ซ้อนกัน
  • เมื่อเหมาะสม คุณสามารถ derive เพียงทิศทางเดียวได้

ถัดไป: การทำงานกับ JSON ผ่าน serde_json

คำถามที่พบบ่อย

บทเรียน “การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม”

มาโคร derive คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม

ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม
  2. การทำงานกับ JSON
  3. การทำให้เป็นอนุกรมแบบกำหนดเอง
  4. รูปแบบอื่น
← กลับไปที่ Learn Rust Coding