Serialize ve Deserialize
- Rust kursu
- Orta seviye
- Ders 101/115
- 4 dk
serde'nin temel Serialize ve Deserialize trait'lerini öğrenirsin.
Serialize ve Deserialize
serde, Rust veri yapılarını JSON, TOML, YAML gibi biçimlere çevirmenin (serileştirme) ve geri okumanın (seriden çözme) standart yoludur. İki trait'e dayanır: Serialize ve Deserialize. Biçimler ayrı crate'lerdir: serde_json, toml, serde_yaml.
// Cargo.toml
// serde = { version = "1", features = ["derive"] }
// serde_json = "1"
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct Kitap {
ad: String,
yil: u16,
}
// {"ad":"Dune","yil":1965}Elle serileştirme
Alıştırmalarda dış crate olmadığı için serileştirmeyi elle yazacağız; derive'ın arka planda ürettiği de özünde budur. Metin alanları tırnak içine alınır, sayılar olduğu gibi yazılır:
impl Kitap {
fn json(&self) -> String {
format!("{{\"ad\":\"{}\",\"yil\":{}}}", self.ad, self.yil)
}
}format! içinde süslü parantez {{ ve }} ile, tırnak \" ile yazılır. Gerçek serde, metindeki özel karakterleri de kaçışlar.
Uygulama Kitabı JSON yap
Kitap { ad: String, yil: u16 } için yukarıdaki json metodunu yaz. Kitap { ad: "Dune".into(), yil: 1965 } için sonucu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
struct Kitap {
ad: String,
yil: u16,
}
impl Kitap {
fn json(&self) -> String {
format!("{{\"ad\":\"{}\",\"yil\":{}}}", self.ad, self.yil)
}
}
fn main() {
let k = Kitap { ad: "Dune".into(), yil: 1965 };
println!("{}", k.json());
}Beklenen çıktı
{"ad":"Dune","yil":1965}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 serde'nin veri yapısını biçimden ayırmasının yararı nedir?
- Yalnızca JSON destekler
- Aynı struct hiç değişmeden JSON, TOML ya da başka bir biçimle kullanılabilir Doğru cevap
- Daha küçük dosyalar
- Şifreleme sağlar
Açıklama: Struct yalnızca "nasıl gezilir" bilgisini verir; biçim crate'i bunu metne çevirir.
2 Yazma trait'i
#[derive(____, Deserialize)]
struct Kitap {
ad: String,
}
#[derive(Serialize, Deserialize)]
struct Kitap {
ad: String,
}
Açıklama: Serialize, değeri bir biçime yazmayı sağlar.
3 Kavram ve anlamı
| Kavram | Anlamı |
|---|---|
Serialize |
Veri → biçim |
Deserialize |
Biçim → veri |
serde_json |
JSON biçimi |
{{ ve }} (format!) |
Kaçışlı süslü parantez |