Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 使用远程对象的代理类型进行Serde序列化_Serialization_Rust_Serde - Fatal编程技术网

Serialization 使用远程对象的代理类型进行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

如何使用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);
}