CodeBlanks Logo Icon CodeBlanks

Serialize ve Deserialize

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
#[derive(____, Deserialize)]
struct Kitap {
    ad: String,
}
Cevap
#[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

Orta seviye bölümündeki tüm dersler