Rust使用Serde进行序列化及反序列化

这篇文章将介绍如何在Rust编程语言中使用Serde库进行序列化和反序列化操作。Serde是一个广泛使用的序列化和反序列化库,能够支持JSON、BSON、CBOR、MessagePack和YAML等常见数据格式。

开始之前

1
2
3
4
5
6
7
8
9
# 在Cargo.toml 新增以下依赖
[dependencies]
serde = { version = "1.0.140",features = ["derive"] }
serde_json = "1.0.82"
serde_yaml = "0.8"
serde_urlencoded = "0.7.1"
# 使用yaserde解析xml
yaserde = "0.8.0"
yaserde_derive = "0.8.0"

Serde通用规则(json,yaml,xml)

1.使用Serde宏通过具体结构实现序列化及反序列化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use serde::{Deserialize, Serialize};
// 为结构体实现 Serialize(序列化)属性和Deserialize(反序列化)
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Person {
    // 将该字段名称修改为lastname
    #[serde(rename = "lastname")]
    name: String,
    // 反序列化及序列化时忽略该字段(nickname)
    #[serde(skip)]
    nickname: String,
    // 分别设置序列化及反序列化时输出的字段名称
    #[serde(rename(serialize = "serialize_id", deserialize = "derialize_id"))
    id: i32,
    // 为age设置默认值
    #[serde(default)]
    age: i32,
    
}

2.使用serde_json序列化及反序列化

1
2
3
4
5
6
7
8
use serde_json::{json, Value};
let v:serde_json::Value = json!(
    {
        "x":20.0,
    	"y":15.0
    }
);
println!("x:{:#?},y:{:#?}",v["x"],v["y"]); // x:20.0, y:15.0

3.使用Serde宏统一格式化输入、输出字段名称

方法名 方法效果
PascalCase 首字母为大写的驼峰式命名,推荐结构体、枚举等名称以及Yaml配置文件读取使用。
camelCase 首字母为小写的驼峰式命名,推荐Yaml配置文件读取使用。
snake_case 小蛇形命名,用下划线"_“连接单词,推荐函数命名以及变量名称使用此种方式。
SCREAMING_SNAKE_CASE 大蛇形命名,单词均为大写形式,用下划线”_“连接单词。推荐常数及全局变量使用此种方式。
kebab-case(小串烤肉) snake_case,使用中横线”-“替换了下划线”_"。
SCREAMING-KEBAB-CAS(大串烤肉) SCREAMING_SNAKE_CASE,使用中横线"-“替换了下划线”_"。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
pub struct App {
    #[serde(rename_all = "PascalCase")]
    /// 统一格式化输入、输出字段名称
    ///  #[serde(rename_all = "camelCase")]
    /// #[serde(rename_all = "snake_case")]
    /// #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
    /// 仅设置
    version: String,
    app_name: String,
    host: String,
}

本文参考:yaserde

本文参考:magiclen

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy