我搜索了一下,似乎找不到这个问题的答案,所以这可能是一个重复。
我有一个String
,如下所示(实际的字符串不是文字):
let param_type_raw = String::from("address");
我想把它反序列化为ethabi::ParamType
类型,它实现了Deserializer
trait。
let param_type: ParamType = serde_json::from_str(format!("\"{}\"", param_type_raw).as_str())?;
但是,将字符串转换为JSON字符串以便将其反序列化为ParamType
似乎是极其多余的,我确信一定有更好的方法可以单独反序列化String
。
3条答案
按热度按时间wi3ka0sx1#
更一般地回答标题:
serde::de::value
模块中的每个原语类型都有一套反序列化器,可以使用IntoDeserializer
trait提供的.into_deserializer()
创建这些原语类型。所以如果你有一个字符串,并且你知道你的类型可以从字符串反序列化,你可以这样做:
这有点烦人,因为反序列化器对错误类型是通用的,所以必须在某处指定一个,但这正是
serde::de::value::Error
的用途。7fyelxc52#
这有一个特定的功能:
oalqel3c3#
或者