为什么 DateTime<Tz> 不能满足 serde::Serialize?

dav*_*ang 5 rust c++-chrono serde

extern crate serde;
extern crate serde_json;

#[macro_use]
extern crate serde_derive;


use chrono::{self, Date,DateTime, TimeZone};
use serde_derive::{Serialize,Deserialize}; // 1.0.91


#[derive(Serialize,Deserialize )]
struct Test<Tz>
where Tz:TimeZone,
{
    t:DateTime<Tz>
}

fn main(){

}
Run Code Online (Sandbox Code Playgroud)

上面的代码不会编译错误:

错误[E0277]:chrono::datetime::DateTime<Tz>: serde::Serialize不满足特征边界--> src/main.rs:16:5

我有

chrono = {version="0.4",features = ["serde"]}
Run Code Online (Sandbox Code Playgroud)

在我的 Cargo.toml

我发现实现在这里:https : //docs.rs/chrono/0.4.6/chrono/struct.DateTime.html#impl-Serialize

完整代码示例在这里https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=57b41f6dd1c4c0a2c7f4f541234137a7

但我不确定操场是否启用了 serde 功能。

dav*_*ang 2

抱歉,大家的问题正如 @crazysim 在评论中所说。

DateTime 没有实现反序列化特征。

如果我删除它,代码将起作用:

extern crate serde;
extern crate serde_json;

#[macro_use]
extern crate serde_derive;


use chrono::{self,DateTime, TimeZone};



#[derive(Serialize )]
struct Test<Tz>
where Tz:TimeZone,
{
    t:DateTime<Tz>
}

fn main(){

}
Run Code Online (Sandbox Code Playgroud)

  • 还有其他方法可以解决这个问题吗?@davyzhang (2认同)