環境
- Time 2021-12-07
- Rust 1.57.0
- serde 1.0.130
- serde_json 1.0.72
概念
參考:https://serde.rs/container-attrs.html
示例
#[serde(rename = "xxxx")]
針對序列化和反序列化同名#[serde(rename(serialize = "xxxx"))]
針對序列化#[serde(rename(deserialize = "xxxx"))]
針對反序列化#[serde(rename(serialize = "xxxx", deserialize = "yyyy"))]
針對不同名
其它的屬性宏也有類似的命名約定。
main.rs
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Person {
#[serde(rename = "my_name")]
name: String,
age: u16,
}
fn main() {
let person = Person {
name: "JiangBo".to_owned(),
age: 44,
};
let json = serde_json::to_string(&person).unwrap();
println!("{}", json);
let p: Person = serde_json::from_str(&json).unwrap();
println!("{:?}", p);
}
總結
使用 serde 進行序列化和反序列化時,對 JSON 中的字段進行重命名。