< 返回版块

github.com/shanliu/lsys 发表于 2022-06-10 19:29

pub struct RestJsonResult {
    code:String,
    sub_code:String,
    message:String,
    data:Option<Box<dyn serde::Serialize>>,//the trait `common::handler::_::_serde::Serialize` cannot be made into an object
}

评论区

写评论
作者 github.com/shanliu/lsys 2022-06-18 00:37

封装好别人用

不确定具体类型

枚举不可行

value挺好用

--
👇
liusen-adalab: 用枚举可能更好点,明确消息结构和分类

试试这个

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0251a1c92679a29556931080f2c34768

#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
pub struct RestJsonResult {
    code: String,
    sub_code: String,
    message: String,
    data: Option<Data>,
}

#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
#[serde(untagged)]
pub enum Data {
    WhatEver { field1: String, field2: u8 },
    Hello(String),
}
liusen-adalab 2022-06-15 09:47

用枚举可能更好点,明确消息结构和分类

试试这个

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0251a1c92679a29556931080f2c34768

#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
pub struct RestJsonResult {
    code: String,
    sub_code: String,
    message: String,
    data: Option<Data>,
}

#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
#[serde(untagged)]
pub enum Data {
    WhatEver { field1: String, field2: u8 },
    Hello(String),
}
作者 github.com/shanliu/lsys 2022-06-11 22:20

可行 thanks

--
👇
snylonue: 先把 data 转成 Value

snylonue 2022-06-11 18:41

先把 data 转成 Value

作者 github.com/shanliu/lsys 2022-06-11 16:01

我如果就是要这样单纯的序列化火反序列化还用你在这来教。。人才 还让人 “学清楚点”

我到建议你多做做项目 学学什么教封装代码

--
👇
kezhuoquan: 建议把serde 和 serde_json学清楚点,不要学不到几分钟就觉得会了,然后他有什么功能,使用事项都没弄清楚就开始做项目,这样系统出问题了,你都不知道在哪出的问题

作者 github.com/shanliu/lsys 2022-06-11 16:00

。。。 无语 孽气那么重

看清楚我的目的在说,别搞的就你会一样

就你这?

我的目的是 怎么把数据放入到 RestJsonResult

然后通过 RestJsonResult 构建一个统一的输出

而且不希望暴露出 下面这些属性 code: String, sub_code: String, message: String, data: Option,

你倒好,自我感觉学的挺多

#[derive(serde::Serialize, serde::Deserialize, Debug)]
        pub struct RestJsonResult<Data> {
            code: String,
            sub_code: String,
            message: String,
            data: Option<Data>,
        }
        #[derive(serde::Serialize, serde::Deserialize, Debug)]
        struct User;

        let json = json!({
            "code": "hello",
            "sub_code": "spring",
            "message": "hello"
        });
        // 反序列化
        let res = serde_json::from_value::<RestJsonResult<Vec<User>>>(json).unwrap();
        // 序列化
        let json = serde_json::to_string(&res);
        println!("{res:?},{json:#?}");

--
👇
kezhuoquan: 建议把serde 和 serde_json学清楚点,不要学不到几分钟就觉得会了,然后他有什么功能,使用事项都没弄清楚就开始做项目,这样系统出问题了,你都不知道在哪出的问题

作者 github.com/shanliu/lsys 2022-06-11 12:13

标注范型参数建议不要了, 因为我的data想作为可选值,标注为范型参数的话,使用的时候诡异到呕血

--
👇
shanliu: 我知道data非安全的trait不能填充到结构体呢 现在问题是,我有个需要序列化的数据 但复制到结构的时候还不能进行序列化 我还需要填充其他数据 如题: 我期望的是 data 为待序列化数据 等我填充了code等其他数据后 在通过 json!({ "code":self.code, "data":self.data }) 完成整体的序列化 如果不能填充到结构,有没有其他变通的方法?

--
👇
kezhuoquan: 提示已经很清楚了, Serialize不能成为特征对象, 因为serialize方法包含有泛型参数, 特征对象的限制

方法的返回类型不能是 Self 方法没有任何泛型参数

👇
Mike Tang: 不明白问题在哪里,序列化后就是 vec,怎么不能放进去,你怎么用的?

作者 github.com/shanliu/lsys 2022-06-11 12:04

我知道data非安全的trait不能填充到结构体呢 现在问题是,我有个需要序列化的数据 但复制到结构的时候还不能进行序列化 我还需要填充其他数据 如题: 我期望的是 data 为待序列化数据 等我填充了code等其他数据后 在通过 json!({ "code":self.code, "data":self.data }) 完成整体的序列化 如果不能填充到结构,有没有其他变通的方法?

--
👇
kezhuoquan: 提示已经很清楚了, Serialize不能成为特征对象, 因为serialize方法包含有泛型参数, 特征对象的限制

方法的返回类型不能是 Self 方法没有任何泛型参数

👇
Mike Tang: 不明白问题在哪里,序列化后就是 vec,怎么不能放进去,你怎么用的?

Mike Tang 2022-06-10 20:56

不明白问题在哪里,序列化后就是 vec,怎么不能放进去,你怎么用的?

1 共 9 条评论, 1 页