如何对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
相关产品推荐
相关产品推荐

