0Pricing
Learn Rust Coding · Урок

Пользовательская сериализация

Атрибуты полей

«Пользовательская сериализация» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Customizing serde

serde gives fine control over how fields map to a format using attributes. You rename fields, skip them, set defaults, and more, all via #[serde(...)].

Renaming a field

Use rename to map a Rust field name to a different key in the output, useful when JSON uses a different convention.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    #[serde(rename = "userName")]
    user_name: String,
}

Renaming everything

Apply a naming convention to all fields at once with rename_all, e.g. snake_case Rust to camelCase JSON.

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
    first_name: String,
    last_name: String,
}

Skipping fields

skip omits a field entirely. skip_serializing_if omits it conditionally, like hiding empty options.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    nickname: Option<String>,
}

Default values on deserialize

default supplies a value when a field is missing from the input, so deserialization does not fail.

use serde::Deserialize;

#[derive(Deserialize)]
struct Config {
    #[serde(default)]
    retries: u32,
}

Custom default function

Point default at a function to provide a non-zero fallback value.

use serde::Deserialize;

fn default_port() -> u16 { 8080 }

#[derive(Deserialize)]
struct Config {
    #[serde(default = "default_port")]
    port: u16,
}

Modeling rename + default

The attribute logic is just key mapping plus fallback. This runnable example mirrors that behavior with a HashMap.

use std::collections::HashMap;

fn main() {
    let mut input: HashMap<&str, &str> = HashMap::new();
    input.insert("userName", "Alice");
    let user_name = input.get("userName").copied().unwrap_or("anon");
    let port = input.get("port").copied().unwrap_or("8080");
    println!("user_name={} port={}", user_name, port);
}

Aliases on deserialize

alias accepts an alternative key when reading, helpful when supporting both old and new field names.

use serde::Deserialize;

#[derive(Deserialize)]
struct User {
    #[serde(alias = "username")]
    name: String,
}

Flatten

flatten inlines a nested struct's fields into the parent object, removing one level of nesting in the JSON.

use serde::Serialize;

#[derive(Serialize)]
struct Meta { page: u32 }

#[derive(Serialize)]
struct Resp {
    data: String,
    #[serde(flatten)]
    meta: Meta,
}

Custom with module

For full control, point with at a module exposing serialize and deserialize functions, e.g. to format a timestamp.

use serde::Serialize;

#[derive(Serialize)]
struct Event {
    #[serde(with = "my_date_format")]
    at: i64,
}

Enum tagging

Control how enums encode with tag (internally tagged) or untagged. This shapes the JSON for variant types.

use serde::Serialize;

#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
    Click { x: i32, y: i32 },
    Key { code: u8 },
}

Quick Check

Test your understanding of custom serialization.

Recap

You learned to customize serialization:

  • rename and rename_all map field names
  • skip, skip_serializing_if control output
  • default and alias ease deserialization
  • flatten, with, and enum tag handle shape

Next: formats beyond JSON.

Часто задаваемые вопросы

Урок «Пользовательская сериализация» бесплатный?

Да — полный текст урока «Пользовательская сериализация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Пользовательская сериализация»?

Атрибуты полей Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Пользовательская сериализация»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сериализация и десериализация
  2. Работа с JSON
  3. Пользовательская сериализация
  4. Другие форматы
← Назад к Learn Rust Coding