rust - 无法在已实现的方法中序列化结构,因为“特性 `serde::Serialize` 没有为 `Self` 实现”
问题描述
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;
#[derive(Serialize)]
pub struct MyStruct<'a> {
pub field1: &'a str,
pub field2: &'a str,
}
pub trait MyTrait {
fn payload_to_json(&self) -> String {
serde_json::to_string(&self)
}
fn do_the_thing(&self) {
println!(payload_to_json(&self));
}
}
impl MyTrait for MyStruct<'_> {}
fn main() {
let n = MyStruct {
field1: "foo"
field2: "bar"
}
n.do_the_thing();
}
// What I'm hoping for: { "field1": "foo", "field2": "bar" }
这给了我以下错误:
error[E0277]: the trait bound `Self: Serialize` is not satisfied
--> src/main.rs:10:31
|
10 | serde_json::to_string(&self)
| ^^^^^ the trait `Serialize` is not implemented for `Self`
我是 Rust 的新手,所以可能会遗漏一些简单的东西;唯一实现 MyTrait 的结构确实已经Serialize
实现(除非我误解了 derived() 的作用),所以我认为编译器没有被告知......某处。有人可以帮忙吗?
解决方案
将您的特征绑定到Serialize
:
pub trait MyTrait: Serialize {
fn payload_to_json(&self) -> String {
serde_json::to_string(&self).expect("A valid json")
}
fn do_the_thing(&self) {
println!("{}", self.payload_to_json());
}
}
推荐阅读
- javascript - 重定向到选项标签内的另一个页面按钮始终重定向到同一页面(JavaScript)
- python - 定期更新图表中的数字
- angular - 如何在生产 SPA (Angular 9.x) 中映射 REST 端点及其交互
- java - 在新的二维数组中对二维数组进行排序(K-means 聚类)
- javascript - 如何等待由从承诺中获取的数据填充的数组被填充?
- javascript - requestAnimationFrame API - 密集 JavaScript 函数期间的动画
- angular - 为什么在formarray自定义验证值更改中没有设置错误
- apache-spark - ArrayType Pyspark 列中唯一元素行的平均值
- php - 为什么方法重置不存在?
- graphql - AppSync 订阅如何处理解析程序异常?