You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中创建类似Java的可序列化对象?

在Rust中实现类似Java的可序列化对象

核心实现:Struct + Serde

Rust里用struct对应Java的类,配合Serde库就能实现序列化/反序列化,完全匹配你的需求,下面是具体步骤:

1. 添加依赖

先在Cargo.toml中引入Serde和常用的序列化格式(以JSON为例):

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

2. 定义可序列化的Struct

对应你提供的JavaObj类,Rust的实现如下:

use serde::{Serialize, Deserialize};

// 派生Serialize和Deserialize trait,自动获得序列化/反序列化能力
#[derive(Debug, Serialize, Deserialize)]
struct Obj {
    obj_no: i32,
    // 若要和Java字段名(驼峰式)一致,可加属性:#[serde(rename = "objName")]
    obj_name: String,
}

// 实现构造方法,模拟Java的构造函数
impl Obj {
    fn new(obj_no: i32, obj_name: String) -> Self {
        Self {
            obj_no,
            obj_name,
        }
    }
}

3. 创建对象并访问字段

和Java逻辑一致,创建实例后直接访问字段(默认同模块可访问,跨模块需给字段加pub修饰):

fn main() {
    let obj_no = 1;
    let obj_name = "Test Object".to_string();
    
    // 创建对象实例
    let obj1 = Obj::new(obj_no, obj_name.clone());
    
    // 访问字段并打印
    println!("Object{}: {}", obj1.obj_no, obj1.obj_name);
}

4. 序列化与反序列化示例

将对象转为JSON字符串(序列化),再从JSON转回对象(反序列化):

fn main() {
    let obj1 = Obj::new(1, "Test Object".to_string());
    
    // 序列化:转为JSON字符串
    let json_str = serde_json::to_string(&obj1).unwrap();
    println!("序列化后的JSON: {}", json_str);
    
    // 反序列化:从JSON字符串恢复对象
    let deserialized_obj: Obj = serde_json::from_str(&json_str).unwrap();
    println!("反序列化后的对象: {:?}", deserialized_obj);
}

关键注意点

  • Rust的struct是静态类型,作用等同于Java类,Serde的派生宏#[derive(Serialize, Deserialize)]帮你自动生成序列化逻辑,无需手动编写。
  • 若需要兼容Java原生的Serializable二进制格式,Serde支持自定义序列化格式,但更推荐JSON、Bson这类跨语言通用格式,兼容性更好。
  • 字段访问权限:如果要在其他模块访问Obj的字段,需要给字段添加pub修饰,比如pub obj_no: i32。

替代方案

如果不想使用Serde,也可以手动编写序列化/反序列化逻辑,但这种方式需要自己处理字段的编码和解码,容易出错且维护成本高,不推荐。

内容的提问来源于stack exchange,提问作者cloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:36:44