Serialization
10/30/24Less than 1 minute
Serialization
Proper serialization ensures smooth data exchange between the backend and frontend.
Serde Attributes
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Model {
#[serde(with = "i64_to_string")] // i64 → String for JS precision
pub id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub optional_field: Option<String>,
#[serde(rename = "created_at")]
pub created_at_formatted: String,
}JSON Field Mapping
Sea-ORM supports JSON columns (with with-json feature):
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, DeriveEntityModel)]
#[sea_orm(table_name = "sys_config")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i64,
pub config_json: Json, // Automatically serialized/deserialized
}i64 to String Conversion
Common utility for JavaScript-safe ID serialization:
pub mod i64_to_string {
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S>(value: &i64, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer {
serializer.serialize_str(&value.to_string())
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<i64, D::Error>
where D: Deserializer<'de> {
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}