10,931
stars
+0+1+54
965
forks
71
watchers
1,075
prs
1,939
issues
322
releases
–
discussions
README
Serde   [![Build Status]][actions] [![Latest Version]][crates.io] [![serde msrv]][Rust 1.56] [![serde_derive msrv]][Rust 1.71]
[Build Status]: https://img.shields.io/github/actions/workflow/status/serde-rs/serde/ci.yml?branch=master
[actions]: https://github.com/serde-rs/serde/actions?query=branch%3Amaster
[Latest Version]: https://img.shields.io/crates/v/serde.svg
[crates.io]: https://crates.io/crates/serde
[serde msrv]: https://img.shields.io/crates/msrv/serde.svg?label=serde%20msrv&color=lightgray
[serde_derive msrv]: https://img.shields.io/crates/msrv/serde_derive.svg?label=serde_derive%20msrv&color=lightgray
[Rust 1.56]: https://blog.rust-lang.org/2021/10/21/Rust-1.56.0/
[Rust 1.71]: https://blog.rust-lang.org/2023/07/13/Rust-1.71.0/
Serde is a framework for serializing and deserializing Rust data structures efficiently and generically.
---
You may be looking for:
- An overview of Serde
- Data formats supported by Serde
- [Setting up [derive(Serialize, Deserialize)]](https://serde.rs/derive.html)
- Examples
- API documentation
- Release notes
Serde in action
Click to show Cargo.toml.
Run this code in the playground.
toml
[dependencies]
The core APIs, including the Serialize and Deserialize traits. Always
required when using Serde. The "derive" feature is only required when
using [derive(Serialize, Deserialize)] to make Serde work with structs
and enums defined in your crate.
serde = { version = "1.0", features = ["derive"] }
Each data format lives in its own crate; the sample code below uses JSON
but you may be using a different one.
serde_json = "1.0"
rust
use serde::{Deserialize, Serialize};
[derive(Serialize, Deserialize, Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let point = Point { x: 1, y: 2 };
// Convert the Point to a JSON string.
let serialized = serde_json::to_string(&point).unwrap();
// Prints serialized = {"x":1,"y":2}
println!("serialized = {}", serialized);
// Convert the JSON string back to a Point.
let deserialized: Point = serde_json::from_str(&serialized).unwrap();
// Prints deserialized = Point { x: 1, y: 2 }
println!("deserialized = {:?}", deserialized);
}
Getting help
Serde is one of the most widely used Rust libraries so any place that Rustaceans
congregate will be able to help you out. For chat, consider trying the
[rust-questions] or [rust-beginners] channels of the unofficial community
Discord (invite: ), the [rust-usage] or
[beginners] channels of the official Rust Project Discord (invite:
), or the [general][zulip] stream in Zulip. For
asynchronous, consider the [\[rust\] tag on StackOverflow][stackoverflow], the
[/r/rust] subreddit which has a pinned weekly easy questions post, or the Rust
[Discourse forum][discourse]. It's acceptable to file a support issue in this
repo but they tend not to get as many eyes as any of the above and may get
closed without a response after some time.
[rust-questions]: https://discord.com/c