At present, I believe supporting the absence of a value requires Option (hard coded) or #[serde(default)].
Option’s Deserialize implementation treats null as None and anything else as Some(…).
The effect of this is that you can’t distinguish between a missing value and null without either (a) making a custom Option-like type with an additional None variant and using #[serde(default)] every time you use it; or (b) a custom deserializer.
It’d be nice to have a better way of doing this, or at the very least a canonical version of one or both of these workarounds.