- Derive `#[derive(Serialize, Deserialize)]` on structs — use `#[serde(rename_all = "camelCase")]` for JSON field naming conventions.
- Use `#[serde(skip_serializing_if = "Option::is_none")]` on `Option<T>` fields to omit null values from JSON output.
- Use `#[serde(default)]` on fields to use `Default::default()` when the field is missing during deserialization — makes APIs forward-compatible.
- Use `#[serde(skip_serializing_if = "Option::is_none")]` to omit null fields in output.
- Use `#[serde(default)]` for fields with sensible defaults during deserialization.
- Use `#[serde(deny_unknown_fields)]` on request types to reject unexpected input.
- Use `serde_json::from_str()` and `serde_json::to_string_pretty()` for JSON operations.