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

如何对chrono::Duration做序列化与反序列化?类型不匹配报错如何解决?

错误原因

你使用的chrono::serde::ts_seconds是专门为DateTime<Utc>类型设计的序列化/反序列化工具,作用是在时间戳整数和DateTime<Utc>实例之间做转换,并不适配chrono::Duration类型,所以编译器会报类型不匹配的错误。

修复方案

根据你需要的序列化格式二选一即可:

  • 如果你希望Duration序列化为纯数字的秒数(整数),将字段上的serde注解替换为Duration专属的秒数序列化模块即可,需要毫秒的话可以改用chrono::serde::duration::milliseconds
  • 如果你接受Duration默认序列化格式(包含秒和纳秒的结构体:{"secs": 123, "nanos": 456}),直接删掉字段上的#[serde(with = ...)]注解即可,你已经开启了chrono的serde特性,Duration本身已经实现了对应的序列化/反序列化trait。

修改后参考代码:

use serde::{Serialize, Deserialize};
use chrono::{DateTime, Duration, Utc};

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Config {
    pub dest_ip: String,
    #[serde(borrow)]
    pub include_paths: Vec<&'static std::path::Path>,
    pub exclude_paths: Vec<&'static std::path::Path>,
    // 替换为duration专属的秒数序列化模块
    #[serde(with = "chrono::serde::duration::seconds")]
    pub time_between_checks: Duration,
}

内容的提问来源于stack exchange,提问作者In Hoc Signo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:06