You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:48:30