17370845950

如何将一个复杂的Java对象序列化为xml 使用XStream库的简单方法
使用XStream库可轻松实现Java对象与XML互转,1. 添加Maven依赖后,2. 定义包含嵌套结构的类如User和Address,3. 通过new XStream()创建实例并设置别名,4. 调用toXML()将对象转为XML字符串,5. 使用fromXML()还原对象,支持私有字段反射访问与循环引用处理。

要将一个复杂的Java对象序列化为XML,使用XStream库是一种简单高效的方式。XStream无需注解也能工作,自动处理对象的字段,包括嵌套对象、集合和循环引用。

添加XStream依赖

如果你使用Maven,在pom.xml中加入以下依赖:



    com.thoughtworks.xstream
    xstream
    1.4.20

准备Java对象

假设有一个复杂对象结构:用户包含地址列表,地址又有城市和邮编等信息。

定义类如下:


class Address {
    private String city;
    private String zipCode;

    public Address(String city, String zipCode) {
        this.city = city;
        this.zipCode = zipCode;
    }
    // toString 省略
}

class User {
    private String name;
    private int age;
    private List addresses;

    public User(String name, int age, List addresses) {
        this.name = name;
        this.age = age;
        this.addresses = addresses;
    }
}

使用XStream序列化为XML

创建XStream实例,调用toXML()方法即可将对象转为XML字符串。

示例代码:


import com.thoughtworks.xstream.XStream;
import java.util.Arrays;

public class XmlSerializationExample {
    public static void main(String[] args) {
        // 构建复杂对象
        List addresses = Arrays.asList(
            new Address("北京", "100001"),
            new Address("上海", "200001")
        );
        User user = new User("张三", 30, addresses);

        // 使用XStream序列化
        XStream xstream = new XStream();
        xstream.alias("user", User.class);
        xstream.alias("address", Address.class);

        String xml = xstream.toXML(user);
        System.out.println(xml);
    }
}

输出结果类似:



  张三
  30
  
    
      北京
      100001
    
    
      上海
      200001
    
  

反序列化XML回对象

从XML还原对象也很简单,只需调用fromXML()


User restoredUser = (User) xstream.fromXML(xml);
System.out.println(restoredUser.getName()); // 输出:张三

XStream会自动处理类型映射和嵌套结构,不需要手动解析节点。

基本上就这些。只要对象字段有默认构造函数或合理结构,XStream就能顺利序列化和反序列化。对于私有字段,它通过反射访问,无需getter/setter。处理复杂Java对象转XML时,这是最直接的方法之一。