Serialization 使用远程对象的代理类型进行Serde序列化
如何使用Serde为远程类型创建序列化程序代理对象?下面是一个最小的示例(): 它找不到以下实现:Serialization 使用远程对象的代理类型进行Serde序列化,serialization,rust,serde,Serialization,Rust,Serde,如何使用Serde为远程类型创建序列化程序代理对象?下面是一个最小的示例(): 它找不到以下实现: error[E0277]:不满足特性绑定'Foo:'u IMPL\'u SERIALIZE\'u FOR_Bar::\u serde::SERIALIZE' -->src/main.rs:27:37 | 27 | let res=serde_json::to_string(&foo).unwrap(); |^^^^特性“\u IMPL\u SERIALIZE\u FOR_Bar::\u serde
error[E0277]:不满足特性绑定'Foo:'u IMPL\'u SERIALIZE\'u FOR_Bar::\u serde::SERIALIZE'
-->src/main.rs:27:37
|
27 | let res=serde_json::to_string(&foo).unwrap();
|^^^^特性“\u IMPL\u SERIALIZE\u FOR_Bar::\u serde::SERIALIZE”没有为'Foo'实现`
|
:::/playery/.cargo/registry/src/github.com-1ec6299db9ec823/serde_json-1.0.48/src/ser.rs:2233:8
|
2233 | T:连载,
|-----------此绑定在`serde_json::ser::to_字符串中需要`
#[serde(remote=“Foo”)]
无法打破孤立规则,因此不会真正实现类型Foo
的特征
您必须将其与#[serde(with=“…”)]
一起使用
一种简单的方法是为序列化创建一个小包装器:
#[派生(serde::序列化)]
结构Foowrapperaah,我担心会是这样。但这解决了我所有的问题。谢谢
use serde; // 1.0.104
use serde_json; // 1.0.48
struct Foo {
bar: u8,
}
impl Foo {
pub fn new() -> Self {
Foo { bar: 10 }
}
pub fn val(&self) -> u8 {
self.bar
}
}
#[derive(serde::Serialize)]
#[serde(remote = "Foo")]
struct Bar {
#[serde(getter = "Foo::val")]
val: u8,
}
fn main() {
let foo = Foo::new();
let res = serde_json::to_string(&foo).unwrap();
println!("{}", res);
}