我是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"