解决cannot find attribute `serde` in this scope记录
问题描述:
在Rust中使用serde做json序列化,需要对一个字段指定序列化方法,添加serde注解后报错:
error: cannot find attribute `serde` in this scope
--> src\models\order_model.rs:38:7
|
38 | #[serde(deserialize_with = "crate::utils::date_utils::deserialize_datetime_str")]
| ^^^^^
|
= note: `serde` is in scope, but it is a crate, not an attribute
报错代码:
pub struct QueryParam {pub id: Option<i32>,pub account_id: Option<i32>,pub job_id: Option<i32>,#[serde(deserialize_with = "crate::utils::date_utils::deserialize_datetime_str")]pub begin: Option<DateTimeWithTimeZone>,#[serde(deserialize_with = "crate::utils::date_utils::deserialize_datetime_str")]pub end: Option<DateTimeWithTimeZone>,
}
解决方法:
为当前stract添加#[derive(Deserialize, Serialize)]注解解决
修改后代码:
use serde::{Serialize, Deserialize};#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct QueryParam {pub id: Option<i32>,pub account_id: Option<i32>,pub job_id: Option<i32>,#[serde(deserialize_with = "crate::utils::date_utils::deserialize_datetime_str")]pub begin: Option<DateTimeWithTimeZone>,#[serde(deserialize_with = "crate::utils::date_utils::deserialize_datetime_str")]pub end: Option<DateTimeWithTimeZone>,
}
原因分析:
根据报错信息很容易以为是导入缺失,其实是忘了添加derive注解,serde属性注解被直接丢给了编译器处理而没经过derive宏处理