我想使用Serde对Bowserinator on github中的化学元素JSON文件进行反序列化.为此,我创建了一个包含所有所需字段的 struct ,并导出了所需的宏:
#[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"值的字段之前,这种方法可以正常工作.
我得到的错误信息是该字段为{ code: Message("invalid type: unit value, expected a string"), line: 8, column: 17 }
.
我用#[serde(default)]
宏做了实验.但这只适用于JSON文件中缺少字段的情况,而不适用于有null
值的情况.
我喜欢用标准宏进行反序列化,避免编写访问者特性.我错过了什么把戏吗?