我是Rust的新手,我想知道是否可以像Java一样创建可序列化的对象。例如,我的Java课看起来像这样:
public class Obj implements Serializable {
int objNo;
String objName;
public Obj (int objNo, String objName) {
this.objNo = sushiNo;
this.objName = objName;
}
}
我能够在另一个函数中创建和访问对象,如下所示:
Obj obj1 = new Obj(objNo, objName);
System.out.println("Object" + objNo + ": " + objName);
如何将此serializable/deserializable Java对象转换为Rust并能够访问它?如果不可能创建类似的东西,还有其他选择吗?
我已经阅读了有关struct和serde的信息,但是我不知道该如何实施它,因为该语法对我来说很困惑,这就是为什么我寻求帮助。
分析解答
如果它有帮助,这是一个琐碎的示例,它将某些结构序列到JSON字符串,然后对此JSON字符串进行反应,以重新创建等价结构。 但是,如果您不熟悉Rust语言的基本元素,那么这将不是很有帮助。
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct Stat {
name: String,
values: Vec<f32>,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let prepared_stats = vec![
Stat {
name: "age".to_owned(),
values: vec![37.0, 51.0, 46.0, 28.0],
},
Stat {
name: "BMI".to_owned(),
values: vec![28.2, 21.3, 18.4, 20.4],
},
];
println!("prepared_stats:\n {:?}", prepared_stats);
let json_serialised_stats = serde_json::to_string(&prepared_stats)?;
println!("json_serialised_stats:\n {}", json_serialised_stats);
let deserialised_stats =
serde_json::from_str::<Vec<Stat>>(&json_serialised_stats)?;
println!("deserialised_stats:\n {:?}", deserialised_stats);
Ok(())
}
/*
prepared_stats:
[Stat { name: "age", values: [37.0, 51.0, 46.0, 28.0] }, Stat { name: "BMI", values: [28.2, 21.3, 18.4, 20.4] }]
json_serialised_stats:
[{"name":"age","values":[37.0,51.0,46.0,28.0]},{"name":"BMI","values":[28.2,21.3,18.4,20.4]}]
deserialised_stats:
[Stat { name: "age", values: [37.0, 51.0, 46.0, 28.0] }, Stat { name: "BMI", values: [28.2, 21.3, 18.4, 20.4] }]
*/
在Cargo.toml
中
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"