การทำให้เป็นอนุกรมแบบกำหนดเอง
แอตทริบิวต์ของฟิลด์
การทำให้เป็นอนุกรมแบบกำหนดเอง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำให้เป็นอนุกรมและการแยกกลับจากอนุกรม
- การทำงานกับ JSON
- การทำให้เป็นอนุกรมแบบกำหนดเอง
- รูปแบบอื่น