经过一个小时的wikis和在Java中使用XMLEncoder的惯例之后,我仍然无法在使用XMLEncoder序列化SystemSnapshot类方面取得任何进展。有人能告诉我出了什么问题吗?我的资源如下:
package core;
import gui.SceneManager;
import java.io.Serializable;
/**
*
* @author Subhra
*/
public class SystemSnapshot implements Serializable{
private static final long serialVersionUID = -6637378268413872760L;
private final School school;
private final User[] users;
private final String colorName;
public SystemSnapshot(){
school = SessionManager.getSchool();
users = UserStore.getUsers();
colorName = SceneManager.getColor();
}
public SystemSnapshot(School school, User[] users, String c) {
this.school = school;
this.users = users;
this.colorName = c;
}
public School getSchool() {
return school;
}
public User[] getUsers() {
return users;
}
public String getColorName() {
return colorName;
}
}终端没有错误。但是输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_40" class="java.beans.XMLDecoder">
<object class="core.SystemSnapshot"/>
</java>有没有人?
在jtahlborn的回答之后,我计算出并添加了所有的getter和setter。现在我得到两种类型的输出。案例1:
XMLEncoder xml = new XMLEncoder(new FileOutputStream("try.xml"));
School ss = new School("S");
ss.addSubject(new Subject("BEnals"));
ss.addTeacher(new Teacher("Nil","T0",21,5000,new Subject("S")));
ss.addClass(new Standard(1,1));
ss.addStudent("STU0");
User u = new User(UserType.ADMIN,"Subhra","subhra","itsveryconfidential");
SystemSnapshot ss2 = new SystemSnapshot(ss,new User[]{u},"A string");
xml.writeObject(ss2);
xml.close();正在产生正确的输出。鉴于案例2:
XMLEncoder oos = new XMLEncoder(new FileOutputStream("data.base"));
SystemSnapshot ss = new SystemSnapshot(SessionManager.getSchool(),UserStore.getUsers(),SceneManager.getColor());
oos.writeObject(ss);
oos.close();仍在产生上述输出。该怎么办呢?
SessionManager 和 UserStore的源代码
SessionManager.java
package core;
import core.User.UserType;
public class SessionManager {
private static User currentuser;
private static School school;
public static void setSchool(School schol) {
school = schol;
}
public static School getSchool() {
return school;
}
public static User getCurrentuser() {
return currentuser;
}
public static void setCurrentuser(User currentuser) {
SessionManager.currentuser = currentuser;
}
public static UserType getCurrentUserType(){
return currentuser.getType();
}
}UserStore.java
package core;
public class UserStore {
private static User[] users = new User[0];
public static User[] getUsers() {
return users;
}
public static void setUsers(User[] users) {
UserStore.users = users;
}
public static void addUser(User u) {
users = new BIO<User>().addToArray(users,u);
}
public static void removeUser(User u) {
users = new BIO<User>().removeFromArray(users,u);
}
public static User getUser(String username){
for(User u : users){
if(u.getUsername().equals(username)){
return u;
}
}
return null;
}
}怎么了?
发布于 2015-07-11 16:08:09
我猜您的SystemSnapshot不是一个有效的java,因为它没有属性的setter。XMLEncoder不像普通序列化那样神奇,它需要有效的java (getter和setter用于所有属性)。
https://stackoverflow.com/questions/31358733
复制相似问题