美文网首页
Rust-序列化/反序列化-Serde

Rust-序列化/反序列化-Serde

作者: 笑破天 | 来源:发表于2023-03-06 21:30 被阅读0次

Rust中序列化通过derive宏serde三方库实现

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]);

相关文章

网友评论

      本文标题:Rust-序列化/反序列化-Serde

      本文链接:https://www.haomeiwen.com/subject/rdzmldtx.html