无法从serde导出并使用Deserialize特性

10

我正在使用 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中。

2个回答

14
Cargo.toml 中:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

-3

让我们来看看你在评论中发布的错误信息:

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

这里有一个非常重要的细节:src/file1.rs。我敢打赌这意味着你在子模块中,而不是在创建根目录中。你需要

use ::serde::de::Deserialize;

请注意前面的::。这使它看起来是从crate根目录开始的。

我不知道,我得到了这个错误:unresolved import serde::de::Deserialize. Did you mean self::serde::de? src/file1.rs:7 use serde::de::Deserialize; - user266003
啊哈!我知道错在哪了。让我更新我的回答。 - Steve Klabnik
这意味着它正在这个模块中寻找serde。出于某种原因,同一文件(file1.rs)中的其他模块可以正确导出。无论如何,现在它能工作了。 - user266003
“use” 默认情况下是相对的。我曾经认为“use”总是绝对的,你需要使用“self”来从此模块及以下导入某些内容,例如使用“use self::SomeEnum::*”来获取枚举中的所有变量,或者使用“use self::submodule:subsubmodule”来导入其中一个子模块。 - Vladimir Matveev
@VladimirMatveev 嗯,这似乎是正确的,但为什么它不从箱根开始呢?如果它总是一个或另一个,我们只需要 ::self 中的一个。 - Steve Klabnik
1
@SteveKlabnik,我猜原因可能是extern crate声明位于子模块中,而不是在crate根目录中。但这只是猜测,当然,如果有一个不能编译的crate的完整示例将会很好。 - Vladimir Matveev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接