如何使用Serde将JSON字符串反序列化为u64类型?编译失败求助
解决Serde将JSON字符串反序列化为整数的问题
你的代码编译失败的核心原因是str::parse的签名不符合Serde deserialize_with属性的要求:deserialize_with需要的函数必须能接收Serde的反序列化器作为参数,而str::parse仅支持接收字符串切片。
方案一:自定义适配函数
手动实现一个符合Serde要求的转换函数,先将反序列化器的内容转为字符串,再执行数值解析:
use serde::{Deserialize, Deserializer}; fn string_to_u64<'de, D>(deserializer: D) -> Result<u64, D::Error> where D: Deserializer<'de>, { let s: &str = Deserialize::deserialize(deserializer)?; s.parse().map_err(serde::de::Error::custom) } #[derive(Debug, Deserialize)] struct WebsocketMessage { #[serde(deserialize_with = "string_to_u64")] timestamp: u64 }
方案二:使用serde_with库简化代码
借助serde_with提供的DisplayFromStr工具,无需手动编写适配函数:
use serde::Deserialize; use serde_with::DisplayFromStr; #[derive(Debug, Deserialize)] struct WebsocketMessage { #[serde(with = "DisplayFromStr")] timestamp: u64 }
使用前需要在Cargo.toml中添加依赖:
serde_with = "3.0"
内容的提问来源于stack exchange,提问作者Sergio Gliesh
相关产品推荐
相关产品推荐

