問題描述:
在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宏處理