如何将字符串字段反序列化为布尔值
How to deserialize a string field to bool
我目前有一个 JSON 字符串,我正在使用 serde_json
进行反序列化。
{
"foo": "<val>" // val can contain "SI" or "NO"
}
我想使用 serde
将其反序列化为 bool 和将“SI”变为 true 的自定义查找,反之亦然。
#[derive(Deserialize)]
pub struct Entry {
pub foo: bool, // How to express string to bool deserialization ?
}
我怎样才能简单地做到这一点?
您可以像这样使用 deserialize_with
:
#[derive(Deserialize)]
pub struct Entry {
#[serde(deserialize_with = "deserialize_bool")]
pub foo: bool,
}
fn deserialize_bool<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: de::Deserializer<'de>,
{
let s: &str = de::Deserialize::deserialize(deserializer)?;
match s {
"SI" => Ok(true),
"NO" => Ok(false),
_ => Err(de::Error::unknown_variant(s, &["SI", "NO"])),
}
}
我目前有一个 JSON 字符串,我正在使用 serde_json
进行反序列化。
{
"foo": "<val>" // val can contain "SI" or "NO"
}
我想使用 serde
将其反序列化为 bool 和将“SI”变为 true 的自定义查找,反之亦然。
#[derive(Deserialize)]
pub struct Entry {
pub foo: bool, // How to express string to bool deserialization ?
}
我怎样才能简单地做到这一点?
您可以像这样使用 deserialize_with
:
#[derive(Deserialize)]
pub struct Entry {
#[serde(deserialize_with = "deserialize_bool")]
pub foo: bool,
}
fn deserialize_bool<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: de::Deserializer<'de>,
{
let s: &str = de::Deserialize::deserialize(deserializer)?;
match s {
"SI" => Ok(true),
"NO" => Ok(false),
_ => Err(de::Error::unknown_variant(s, &["SI", "NO"])),
}
}