0Pricing
Learn Rust Coding · Lección

Serialización personalizada

Atributos de campo

Serialización personalizada es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.

Personalizar serde

serde ofrece un control preciso sobre cómo se asignan los campos a un formato mediante atributos. Puede cambiar el nombre de los campos, omitirlos, establecer valores predeterminados y mucho más, todo mediante #[serde(...)].

Cambiar el nombre de un campo

Use rename para asignar a un campo de Rust una clave diferente en la salida, algo útil cuando JSON utiliza otra convención.

use serde::Serialize;

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

Cambiar el nombre de todos los campos

Aplique una convención de nombres a todos los campos a la vez con rename_all, por ejemplo, de snake_case en Rust a camelCase en JSON.

use serde::Serialize;

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

Omitir campos

skip omite un campo por completo. skip_serializing_if lo omite de forma condicional, por ejemplo, cuando las opciones están vacías.

use serde::Serialize;

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

Valores predeterminados al deserializar

default proporciona un valor cuando falta un campo en la entrada, de modo que la deserialización no falla.

use serde::Deserialize;

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

Función de valor predeterminado personalizada

Asigne a default una función para proporcionar un valor alternativo distinto de cero.

use serde::Deserialize;

fn default_port() -> u16 { 8080 }

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

Modelar rename + default

La lógica de los atributos consiste simplemente en asignar claves y proporcionar valores alternativos. Este ejemplo ejecutable reproduce ese comportamiento con un 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);
}

Alias al deserializar

alias acepta una clave alternativa al leer, lo que resulta útil para admitir nombres de campos antiguos y nuevos.

use serde::Deserialize;

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

Aplanar

flatten inserta los campos de una estructura anidada en el objeto principal, eliminando un nivel de anidamiento en el JSON.

use serde::Serialize;

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

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

Personalizado con un módulo

Para tener un control total, indique en with un módulo que exponga las funciones serialize y deserialize, por ejemplo, para dar formato a una marca de tiempo.

use serde::Serialize;

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

Etiquetado de enumeraciones

Controle cómo se codifican las enumeraciones con tag (etiquetado interno) o untagged (sin etiquetar). Esto determina la estructura JSON de los tipos variantes.

use serde::Serialize;

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

Comprobación rápida

Compruebe su comprensión de la serialización personalizada.

Resumen

Ha aprendido a personalizar la serialización:

  • rename y rename_all asignan nombres a los campos
  • skip y skip_serializing_if controlan la salida
  • default y alias facilitan la deserialización
  • flatten, with y tag para enumeraciones gestionan la estructura

A continuación: formatos más allá de JSON.

Preguntas frecuentes

¿La lección «Serialización personalizada» es gratis?

Sí — el texto completo de «Serialización personalizada» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.

¿Qué aprenderé en «Serialización personalizada»?

Atributos de campo Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn Rust Coding?

No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Serialización personalizada»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?

Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Serialización y deserialización
  2. Trabajo con JSON
  3. Serialización personalizada
  4. Otros formatos
← Volver a Learn Rust Coding