Rust中序列化通過derive宏
和serde
三方庫實現(xiàn)
serde = { version = "1.0.137", features = ["derive", "rc"] } # 引用serde并開啟derive features
serde_json = "1.0.81" # 用于serde<-->json
示例代碼
use serde::{Serialize,Deserialize};
fn main() {
serde_attr_demo1();
}
// 使用derive來進行序列化
#[derive(Serialize, Deserialize, Debug)]
struct Point {
x: i32,
y: i32,
}
fn serde_attr_demo1() {
let p = Point{x:1, y:2};
// 序列化:struct -> json
let serialized = serde_json::to_string(&p).unwrap();
println!("serialized = {}", serialized);
// 反序列化: json -> struct
let deserialized: Point = serde_json::from_str(&serialized).unwrap();
println!("deserialized = {:?}", deserialized);
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Event {
debug_meta: DebugMeta,
}
#[derive(Debug, Deserialize, Serialize)]
struct DebugMeta {
images: Vec<String>,
}
fn serde_attr_demo2() {
let json_str = r#"{
"debug_meta":{
"images":[
"0x100002398",
"0x1000021ef"
]
}
}"#;
let event: Event = serde_json::from_str(&json_str).unwrap();
println!("event={:?}",event);
}
let data = r#"
{
"name": "John Doe",
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
}"#;
let v: Value = serde_json::from_str(data)?;
println!("Please call {} at the number {}", v["name"], v["phones"][0]);