目前采用XSTREAM开源组件做xml的序列化和反序列化,尝试了下,做了个DEMO,以备查阅
@XStreamAlias("User") public class User { @XStreamAlias("Id") public String id; @XStreamAlias("DisplayName") public String displayName; public User() { super(); } public User(String id, String displayName) { super(); this.id = id; this.displayName = displayName; } }
@XStreamAlias("Content") public class Content { @XStreamAlias("Id") public String id; @XStreamAlias("Name") public String name; @XStreamAlias("Value") public String value; public Content(String id, String name, String value) { super(); this.id = id; this.name = name; this.value = value; } }
@XStreamAlias("TestXstream") public class TestXstream { // 标记为节点属性 @XStreamAsAttribute protected String xmlns = "http://s3.amazonaws.com/doc/2006-03-01"; // 忽略该属性 @XStreamOmitField public String ignoreProperty; // 序列化别名 @XStreamAlias("Name222") public String name; @XStreamAlias("Type") public String type; public Map<String, String> map = new HashMap<String, String>(); @XStreamAlias("Users") public List<User> users = new ArrayList<User>(); public List<Content> contents = new ArrayList<Content>(); public TestXstream() { super(); } public TestXstream(String name, String type) { super(); this.name = name; this.type = type; } /** * 使用DEMO * * @param args */ public static void main(String[] args) { TestXstream tx = new TestXstream("我带中文,yes", "我也特殊字符哈<f>"); tx.contents.add(new Content("1", "name1", "value1")); tx.contents.add(new Content("2", "name2", "value2")); tx.users.add(new User("1", "zhansgdfasdf")); tx.users.add(new User("2", "asdfasdfasdf")); tx.map.put("1", "234234"); tx.map.put("2", "234234"); // 对象序列化 XStream xstream = new XStream(new DomDriver()); xstream.autodetectAnnotations(true); // 不序列化contents属性,但是序列化下面的子对象 xstream.addImplicitCollection(TestXstream.class, "contents"); // 格式化输出 System.out.println(xstream.toXML(tx)); // 无格式输出 Writer writer = new StringWriter(); xstream.marshal(tx, new CompactWriter(writer)); String seri = writer.toString(); System.out.println(seri); // 反序列化 Object object = xstream.fromXML(seri, new TestXstream()); System.out.println(object); } }