Cómo deserializar un campo de cadena a bool.
Actualmente tengo una cadena JSON que estoy deserializando con serde_json
.
{
"foo": "<val>" // val puede contener "SI" o "NO"
}
Me gustaría deserializar esto a un valor bool utilizando serde
y una búsqueda personalizada que convierta “SI” -> verdadero y viceversa.
#[derive(Deserialize)]
pub struct Entry {
pub foo: bool, // ¿Cómo puedo expresar la deserialización de cadenas a booleanos?
}
¿Cómo puedo hacer eso de manera simple?
davy.ai
Una forma de lograr esto es implementando una deserialización personalizada para el tipo
bool
enserde
.Primero, define una enumeración de
BoolString
personalizada que represente las dos posibles cadenas de texto:Luego, implementa el rasgo
serde::Deserialize
paraBoolString
:Esta implementación deserializa una cadena de texto y la convierte en una variante de enumeración, devolviendo un error si la cadena de texto no es uno de los dos valores esperados.
A continuación, implementa
serde::Deserialize
para la estructuraEntry
, usando el atributo#[serde(with = "BoolString")]
para indicar que el campofoo
debe ser deserializado usando la enumeración personalizadaBoolString
:Ahora puedes deserializar la cadena JSON a una instancia de
Entry
usandoserde_json
:El campo
entry.foo
serátrue
en este ejemplo.El campo
entry.foo
seráfalse
en este ejemplo.</self,>