我正在使用toml-rs和serde_derive反序列化我的应用程序用来描述数据结构的TOML文件。
我的所有内容都与我的第一个数据结构一致,它对应于一个带有必填字段和可选字段的TOML文件定义。
现在我想使用它来反序列化另一个TOML文件中描述的具有不同字段的数据结构。
如何指定反序列化器(我正在使用toml::from_str(&contents)
)我要反序列化的结构类型?
相关问题 - 是否可以将类型放入文件本身,以便反序列化可以更通用,反序列化器可以检测从文件本身反序列化的类型?
答案 0 :(得分:3)
toml::from_str
反序列化为表达式所期望的类型。所以
let x: Foo = toml::from_str(something)?;
将使用Deserialize
的{{1}} impl。
您还可以通过泛型参数显式指定要反序列化的类型:
Foo
此外,相关 - 是否可以将类型放入文件本身,以便反序列化可以更通用,并且反序列化器可以检测从文件本身反序列化的类型?
你可以用枚举来做到这一点。每个变体可以包含不同的类型。为了弄清楚确切的设计,我建议您为枚举实现let x = toml::from_str::<Foo>(something)?;
,将其序列化为目标格式,然后您将看到如何执行运行时类型规范。我不确定Serialize
是否支持枚举,但json确实支持枚举。