我想反序列化化学元素 JSON 文件GitHub 上的 Bowserinator https://github.com/Bowserinator/Periodic-Table-JSON/blob/master/PeriodicTableJSON.json使用塞尔德。为此,我创建了一个包含所有所需字段的结构,并派生了所需的宏:
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Element {
name: String,
appearance: String,
atomic_mass: f64,
boil: f64,
category: String,
#[serde(default)]
color: String,
density: f64,
discovered_by: String,
melt: f64,
#[serde(default)]
molar_heat: f64,
named_by: String,
number: String,
period: u32,
phase: String,
source: String,
spectral_img: String,
summary: String,
symbol: String,
xpos: u32,
ypos: u32,
}
这可以正常工作,直到到达包含“null”值的字段为止。
例如。对于现场"color": null,
在氦气中。
我收到的错误消息是{ code: Message("invalid type: unit value, expected a string"), line: 8, column: 17 }
对于这个领域。
我尝试过#[serde(default)]
宏观。但这仅适用于 JSON 文件中缺少该字段的情况,而不适用于存在null
value.
我喜欢使用标准宏进行反序列化,避免对访问者特征进行编程。有什么我想念的技巧吗?