【问题标题】:Can't export and use the trait Deserialize from serde无法从 serde 导出和使用特征反序列化
【发布时间】:2015-08-18 15:57:52
【问题描述】:

我正在使用箱子 serde_json。这是我的 TOML 文件:

[dependencies]
hyper = "0.6.8"
time = "0.1"
serde_json = "0.5.1"
serde = "0.5.1"

然后导出:

extern crate serde;

// use serde::de::Deserialize; // unresolved import
use serde::Deserialize;  // unresolved import

在文档中它说它在模块serde::de中。

【问题讨论】:

    标签: json rust


    【解决方案1】:

    Cargo.toml:

    [dependencies]
    serde = { version = "1.0", features = ["derive"] }
    serde_json = "1.0"
    

    【讨论】:

      【解决方案2】:

      让我们阅读您在评论中发布的错误消息:

      error: unresolved import serde::de::Deserialize. Did you mean self::serde::de?
      src/file1.rs:7 use serde::de::Deserialize;
      

      这里有一个非常重要的信息:src/file1.rs。我敢打赌,这意味着您在子模块中,而不是在 crate 根中。你会想要

      use ::serde::de::Deserialize;
      

      注意前面的::。这使它从 crate 根目录看。

      【讨论】:

      • 我不知道,我知道这个error: unresolved import serde::de::Deserialize. Did you mean self::serde::desrc/file1.rs:7 use serde::de::Deserialize;`
      • 啊哈!我知道出了什么问题。让我更新我的答案。
      • which means it's looking for a serde in this module - 由于某种原因,同一文件 (file1.rs) 中的其他模块被正确导出。无论如何,它现在正在工作。
      • "use is relative by default" 我的印象是use 总是绝对的,你需要使用self 才能从这个模块及以下模块导入一些东西,比如use self::SomeEnum::*从枚举或use self::submodule:subsubmodule 获取所有变体以导入其中一个子子模块。
      • @SteveKlabnik,我想原因可能是extern crate 声明位于子模块中,而不是在板条箱根中。但这当然只是一种猜测。如果有一个非编译 crate 的完整示例会很不错。
      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多