rust - 如何使用 serde 序列化包含 ndarray 字段的结构?
问题描述
我对 Rust 比较陌生,但希望将它用于一些数字工作,并开始探索ndarray crate。serde::Serialize
但是,这样做时,我在尝试派生和serde::Deserialize
包含数组的结构时有点难过。
特别是,我尝试编译以下代码段,但这样做时出错:
extern crate serde;
use ndarray::{ Array1 };
use serde::{ Serialize, Deserialize };
#[derive(Serialize, Deserialize)]
pub struct Canary {
pub xs: Array1<f64>
}
error[E0277]: the trait bound `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 1]>>: serde::Serialize` is not satisfied
--> src/lib.rs:40:5
|
40 | pub xs: Array1<f64>
| ^^^ the trait `serde::Serialize` is not implemented for `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 1]>>`
|
= note: required by `serde::ser::SerializeStruct::serialize_field`
# Cargo.toml
[dependencies]
ndarray = { version = "0.12.1", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
查看 上的界限impl<A, D, S> Serialize for ArrayBase<S, D> where A: Serialize, D: Dimension + Serialize, S: Data<Elem = A>
,我对错误是什么感到有些困惑,因为A = f64
implementsSerialize
和 sinceD = Dim<[usize; 1]>
都实现了Dimension
and Serialize
。为了为包含数组的结构派生序列化,我是否缺少一些东西?谢谢!
解决方案
最新版本ndarray
是0.13.1
.
更新您的版本Cargo.toml
应该可以解决问题:
[dependencies]
ndarray = { version = "0.13.1", features = ["serde"] }
@Locke 在评论中建议了这个答案。我刚刚为未来的访客创建了一个小答案。
推荐阅读
- excel - 如何使用密码取消保护工作簿、运行代码、重新保护工作簿?
- rust - SQLx 的通用特征和参考
- mysql - WordPress数据库经常崩溃
- java - 当我启动线程时 JavaFX 冻结 - 我正在使用 Runlater 命令
- php - 无效会话未注销 - Laravel 5
- scala - 你能启发我如何让我的 sbt 工作吗?
- google-sheets - 使用 open_by_key 时出现 SSLError(电子表格 ID)
- javascript - 在 react-router 上链接后组件不会重新渲染
- ruby - 当Ruby中有句号或“...”时,如何打印字符串并暂停?
- c++ - 从类型推断返回类型中删除 const 限定符