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

การทำให้เป็นอนุกรมแบบกำหนดเอง

แอตทริบิวต์ของฟิลด์

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

ปรับแต่ง serde

serde ให้คุณควบคุมวิธีจับคู่ฟิลด์กับรูปแบบข้อมูลได้อย่างละเอียดผ่าน แอตทริบิวต์ คุณสามารถเปลี่ยนชื่อฟิลด์ ข้ามฟิลด์ กำหนดค่าเริ่มต้น และอื่น ๆ ได้ทั้งหมดผ่าน #[serde(...)]

เปลี่ยนชื่อฟิลด์

ใช้ rename เพื่อจับคู่ชื่อฟิลด์ Rust กับคีย์อื่นในผลลัพธ์ ซึ่งมีประโยชน์เมื่อ JSON ใช้รูปแบบการตั้งชื่อที่ต่างกัน

use serde::Serialize;

#[derive(Serialize)]
struct User {
    #[serde(rename = "userName")]
    user_name: String,
}

เปลี่ยนชื่อทุกฟิลด์

ใช้รูปแบบการตั้งชื่อกับทุกฟิลด์พร้อมกันด้วย rename_all เช่น เปลี่ยน snake_case ของ Rust เป็น camelCase ใน JSON

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
    first_name: String,
    last_name: String,
}

ข้ามฟิลด์

skip จะตัดฟิลด์ออกทั้งหมด ส่วน skip_serializing_if จะตัดออกตามเงื่อนไข เช่น ซ่อนค่าตัวเลือกที่ว่าง

use serde::Serialize;

#[derive(Serialize)]
struct User {
    name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    nickname: Option<String>,
}

ค่าเริ่มต้นเมื่อดีซีเรียลไลซ์

default จะกำหนดค่าเมื่อฟิลด์หายไปจากอินพุต ทำให้การดีซีเรียลไลซ์ไม่ล้มเหลว

use serde::Deserialize;

#[derive(Deserialize)]
struct Config {
    #[serde(default)]
    retries: u32,
}

ฟังก์ชันค่าเริ่มต้นแบบกำหนดเอง

ระบุฟังก์ชันให้กับ default เพื่อจัดหาค่าทดแทนที่ไม่ใช่ศูนย์

use serde::Deserialize;

fn default_port() -> u16 { 8080 }

#[derive(Deserialize)]
struct Config {
    #[serde(default = "default_port")]
    port: u16,
}

จำลองการเปลี่ยนชื่อและค่าเริ่มต้น

ตรรกะของแอตทริบิวต์ก็คือการจับคู่คีย์กับค่าทดแทน ตัวอย่างที่รันได้นี้จำลองพฤติกรรมดังกล่าวด้วย HashMap

use std::collections::HashMap;

fn main() {
    let mut input: HashMap<&str, &str> = HashMap::new();
    input.insert("userName", "Alice");
    let user_name = input.get("userName").copied().unwrap_or("anon");
    let port = input.get("port").copied().unwrap_or("8080");
    println!("user_name={} port={}", user_name, port);
}

ชื่อแทนเมื่อดีซีเรียลไลซ์

alias ยอมรับคีย์ทางเลือกเมื่ออ่านข้อมูล ซึ่งมีประโยชน์เมื่อรองรับทั้งชื่อฟิลด์แบบเก่าและแบบใหม่

use serde::Deserialize;

#[derive(Deserialize)]
struct User {
    #[serde(alias = "username")]
    name: String,
}

ทำให้แบน

flatten จะนำฟิลด์ของ struct ที่ซ้อนอยู่มาไว้ในออบเจ็กต์แม่โดยตรง เพื่อลดระดับการซ้อนใน JSON ลงหนึ่งระดับ

use serde::Serialize;

#[derive(Serialize)]
struct Meta { page: u32 }

#[derive(Serialize)]
struct Resp {
    data: String,
    #[serde(flatten)]
    meta: Meta,
}

กำหนดเองด้วยโมดูล

หากต้องการควบคุมอย่างเต็มที่ ให้ระบุโมดูลที่มีฟังก์ชัน serialize และ deserialize ให้กับ with เช่น เพื่อจัดรูปแบบเวลาประทับ

use serde::Serialize;

#[derive(Serialize)]
struct Event {
    #[serde(with = "my_date_format")]
    at: i64,
}

การติดแท็ก enum

ควบคุมวิธีเข้ารหัส enum ด้วย tag (ติดแท็กภายใน) หรือ untagged ซึ่งจะกำหนดโครงสร้าง JSON สำหรับชนิดข้อมูลที่มีหลาย variant

use serde::Serialize;

#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
    Click { x: i32, y: i32 },
    Key { code: u8 },
}

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

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

สรุป

คุณได้เรียนรู้การปรับแต่งการทำซีเรียลไลซ์:

  • rename และ rename_all ใช้จับคู่ชื่อฟิลด์
  • skip และ skip_serializing_if ใช้ควบคุมผลลัพธ์
  • default และ alias ช่วยให้การดีซีเรียลไลซ์สะดวกขึ้น
  • flatten, with และ tag ของ enum ใช้จัดการโครงสร้าง

ถัดไป: รูปแบบข้อมูลนอกเหนือจาก JSON

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

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

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

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

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

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

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

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

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

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

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

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

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