【问题标题】:Why DateTime<Tz> can not satisfy serde::Serialize?为什么 DateTime<Tz> 不能满足 serde::Serialize?
【发布时间】:2019-10-29 16:42:30
【问题描述】:
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(){

}

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

error[E0277]: trait bound chrono::datetime::DateTime<Tz>: serde::Serialize 不满足 --> src/main.rs:16:5

我有

chrono = {version="0.4",features = ["serde"]}

在我的 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 功能。

【问题讨论】:

  • 您确定错误消息是serde::Serialize 而不是serde::Deserialize?如果我在派生中取出Deserialize,则您的示例有效。此外,您为该类型链接的文档中没有Deserializerustc --version: 1.35.0, [dependencies] chrono = {version="0.4",features = ["serde"]} serde = "1.0.92" serde_json = "1.0.39" serde_derive = "1.0.92"
  • @crazysim 感谢您的回复。我的错,我没有看到反序列化会成为这里的障碍。谢谢!
  • 我不明白您是如何收到该错误消息的。 ????,你猜这是错误信息吗?我敢肯定,简单地运行 Rust 编译器会比提出 SO 问题要快。

标签: rust chrono serde


【解决方案1】:

对不起,问题正如@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(){

}

【讨论】:

  • 还有其他方法可以解决这个问题吗? @davyzhang
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2013-07-08
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多