0

我正在使用 toml-rs 和 serde_derive 反序列化我的应用程序用来描述数据结构的 TOML 文件。

我使用我的第一个数据结构进行了所有工作,该数据结构对应于一个 TOML 文件定义,其中包含必填字段和可选字段。

现在我想用它来反序列化另一个 TOML 文件中描述的具有不同字段的另一个数据结构。

如何向反序列化器(我正在使用toml::from_str(&contents))指定要反序列化的结构类型?

相关问题 - 是否可以将类型放入文件本身,以便反序列化可以更通用,并且反序列化器可以检测到从文件本身反序列化的类型?

4

1 回答 1

3

toml::from_str反序列化为表达式预期的类型。所以

let x: Foo = toml::from_str(something)?;

Deserialize使用Foo.

您还可以通过泛型参数显式指定要反序列化的类型:

let x = toml::from_str::<Foo>(something)?;

另外,相关的 - 是否可以将类型放入文件本身,以便反序列化可以更通用,并且反序列化器可以检测到从文件本身反序列化的类型?

你可以用枚举做到这一点。每个变体可以容纳不同的类型。为了弄清楚我建议您Serialize为枚举实现的确切设计,将其序列化为您的目标格式,您将看到如何进行运行时类型规范。我不确定是否toml支持枚举,但 json 肯定支持。

于 2017-11-22T09:40:04.570 回答