不知道有人用XStream来序列化对象和反序列化对象没有?如果有的话,请指教下小弟!将不胜感激!
这是个序列化的类,Employee是父类,SE是继承它的子类。SE有1个私有属性basemoney,name,gender,age继承自父类。其中gender是个枚举,包含2个成员:Famale,Male
package cn.java.xml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;import com.thoughtworks.xstream.XStream;
public class SEWriter {
static List<Employee> list=null;
static{
list=new ArrayList<Employee>();
list.add(new SE("WinterYan","21", Gender.Male, 2000));
list.add(new SE("ZenKiTang","19", Gender.Male, 2000));
list.add(new SE("LighterLee","24", Gender.Male, 2000));
}
public static void main(String[] args) {
XStream xs=new XStream();
try {
FileOutputStream fs=new FileOutputStream("e:/employee.xml");
xs.toXML(se, fs);
System.out.println("序列化成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}序列化成功后的xml文件内容:<list> <cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>WinterYan</name>
<age>21</age>
<gender>Male</gender>
</cn.java.xml.SE>
<cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>ZenKiTang</name>
<age>19</age>
<gender reference="../../cn.java.xml.SE/gender"/>
</cn.java.xml.SE>
<cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>LighterLee</name>
<age>24</age>
<gender reference="../../cn.java.xml.SE/gender"/>
</cn.java.xml.SE></list>然后我想再反序列化,却读取不成功,调试又看不出来什么。也没有任何异常,跪求指教!反序列化的代码:package cn.java.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XSReader {
public static void main(String[] args) {
XStream xs=new XStream(new DomDriver());
List<Employee> list=new ArrayList<Employee>();
try {
FileInputStream fis=new FileInputStream("e:/employee.xml");
xs.fromXML(fis, list);
for(Employee ep : list){
System.out.println(ep.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}输出为:
name null
age null
gender null
basemoney 0.0
这是个序列化的类,Employee是父类,SE是继承它的子类。SE有1个私有属性basemoney,name,gender,age继承自父类。其中gender是个枚举,包含2个成员:Famale,Male
package cn.java.xml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;import com.thoughtworks.xstream.XStream;
public class SEWriter {
static List<Employee> list=null;
static{
list=new ArrayList<Employee>();
list.add(new SE("WinterYan","21", Gender.Male, 2000));
list.add(new SE("ZenKiTang","19", Gender.Male, 2000));
list.add(new SE("LighterLee","24", Gender.Male, 2000));
}
public static void main(String[] args) {
XStream xs=new XStream();
try {
FileOutputStream fs=new FileOutputStream("e:/employee.xml");
xs.toXML(se, fs);
System.out.println("序列化成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}序列化成功后的xml文件内容:<list> <cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>WinterYan</name>
<age>21</age>
<gender>Male</gender>
</cn.java.xml.SE>
<cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>ZenKiTang</name>
<age>19</age>
<gender reference="../../cn.java.xml.SE/gender"/>
</cn.java.xml.SE>
<cn.java.xml.SE>
<baseMoney>2000.0</baseMoney>
<name>LighterLee</name>
<age>24</age>
<gender reference="../../cn.java.xml.SE/gender"/>
</cn.java.xml.SE></list>然后我想再反序列化,却读取不成功,调试又看不出来什么。也没有任何异常,跪求指教!反序列化的代码:package cn.java.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XSReader {
public static void main(String[] args) {
XStream xs=new XStream(new DomDriver());
List<Employee> list=new ArrayList<Employee>();
try {
FileInputStream fis=new FileInputStream("e:/employee.xml");
xs.fromXML(fis, list);
for(Employee ep : list){
System.out.println(ep.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}输出为:
name null
age null
gender null
basemoney 0.0
public class Employee {
/**
* Describe name here.
*/
private String name;
/**
* Describe age here.
*/
private int age;
/**
* Describe gender here.
*/
private Gender gender; /**
* Get the <code>Gender</code> value.
*
* @return a <code>Gender</code> value
*/
public final Gender getGender() {
return gender;
} /**
* Set the <code>Gender</code> value.
*
* @param gender The new Gender value.
*/
public final void setGender(final Gender gender) {
this.gender = gender;
} /**
* Get the <code>Age</code> value.
*
* @return an <code>int</code> value
*/
public final int getAge() {
return age;
} /**
* Set the <code>Age</code> value.
*
* @param age The new Age value.
*/
public final void setAge(final int age) {
this.age = age;
} /**
* Get the <code>Name</code> value.
*
* @return a <code>String</code> value
*/
public final String getName() {
return name;
} /**
* Set the <code>Name</code> value.
*
* @param name The new Name value.
*/
public final void setName(final String name) {
this.name = name;
} protected Employee(){}
public Employee(String name,int age,Gender gender){
this.name = name;
this.age = age;
this.gender = gender;
}
}
Gender.java
public enum Gender {
Female, Male
}
SE.java
public class SE extends Employee {
/**
* Describe basemoney here.
*/
private int basemoney; /**
* Get the <code>Basemoney</code> value.
*
* @return an <code>int</code> value
*/
public final int getBasemoney() {
return basemoney;
} /**
* Set the <code>Basemoney</code> value.
*
* @param basemoney The new Basemoney value.
*/
public final void setBasemoney(final int basemoney) {
this.basemoney = basemoney;
} protected SE(){}
public SE(String name, int age, Gender gender, int basemoney){
super(name,age,gender);
this.basemoney = basemoney;
}
}
import java.util.ArrayList;
import java.util.List;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;import com.thoughtworks.xstream.XStream;public class XExample {
public static void main(final java.lang.String[] args) {
List<Employee> list = new ArrayList<Employee>();
list.add(new SE("Winter Yan", 21, Gender.Male, 2000));
list.add(new SE("ZenKi Tang", 19, Gender.Male, 2000));
list.add(new SE("Ligher Lee", 24, Gender.Male, 2000)); XStream xs = new XStream();
try (FileOutputStream fs = new FileOutputStream("employee.xml")){
xs.toXML(list,fs);
} catch (IOException e) {
} try (FileInputStream fi = new FileInputStream("employee.xml")){
List<Employee> employees = (List<Employee>)xs.fromXML(fi);
for (Employee e: employees) {
System.out.println(e.getName());
}
} catch (IOException e) { } }
}
employee.xml<list>
<SE>
<name>Winter Yan</name>
<age>21</age>
<gender>Male</gender>
<basemoney>2000</basemoney>
</SE>
<SE>
<name>ZenKi Tang</name>
<age>19</age>
<gender>Male</gender>
<basemoney>2000</basemoney>
</SE>
<SE>
<name>Ligher Lee</name>
<age>24</age>
<gender>Male</gender>
<basemoney>2000</basemoney>
</SE>
</list>终端输出:
Winter Yan
ZenKi Tang
Ligher Lee
http://007ej.com/user.asp
http://happyran.zbpifa.com
呢?是不是在封装的时候加了final标记?原来formXML()还有返回值啊,阿三害人额!
xstream.setMode(XStream.NO_REFERENCES);