我想知道,当通过serde映射时,如何在JSON中支持"类型-流体"(又名变量类型)字段.作为解析器,我使用json5
个 crate (由serde
支持).并且某些输入字段可能包含"foo": "bar"
的键值或同一键后面的列表,即"foo": [ "bar", "and", "more" ]
.
https://serde.rs/data-model.html的文档实际上并没有给我一个关于如何映射这个用例的线索.我try 使用枚举作为变量载体,见下文,但这不起作用,在运行时,这最终导致一些错误结果,如Err(Message { msg: "unknown variant `hello world`, expected `Single` or `Multi`", location: Some(Location { line: 4, column: 20 }) })
.
到目前为止,我仍然找不到一种方法来告诉它"将它作为值或值列表,让我看看您解析了哪种类型".
#[derive(Deserialize, Debug, PartialEq)]
enum StringOrStrings {
Single(String),
Multi(Vec<String>),
}
#[derive(Deserialize, Debug, PartialEq)]
struct Config {
message: StringOrStrings,
n: i32,
}