症状
Serde 在反序列化时返回 missing field 或 invalid type 之类的错误。结构体与负载不匹配:必填字段缺失、字段被重命名却无 rename 属性,或 JSON 值类型与 Rust 字段不同。错误会指出字段或类型,因此应比对结构体定义与实际负载。
诊断
读取失败的字段或类型;用 rename/alias 映射名称;对可能缺失的字段用 default 或 Option。
cargo test 2>&1 | grep -A2 "missing field\|invalid type"
根因
输入数据与 Rust 类型不匹配:必填字段缺失、被重命名的字段未映射,或值的类型与字段期望不同。
修复
用 rename 与 alias 对齐名称;对可能缺失的字段加 default 或改为 Option;修正字段类型以匹配真实数据。
验证
反序列化代表性负载确认成功,并确认所得结构体含预期值(包括默认值)。值正确而非仅仅解析成功才算映射正确。
常见陷阱
对所有字段都加 default 会掩盖真正必填字段的缺失;应只对确实可选的字段使用。