2016-01-29 59 views
0

我使用Gson序列化class稱爲User.class延伸Externalizable外部化:序列化與GSON

public class User implements Externalizable { 

    String username = "testname";   

    @Override 
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {} 

    @Override 
    public void writeExternal(ObjectOutput out) throws IOException { 
     out.writeObject(username); 
    } 
} 

文件中的輸出是

{ 
    user: {} 
} 

,而不是

{ 
    user: "testname" 
} 
+1

你如何序列化對象?如果它是一個簡單的pojo,只需爲要序列化的屬性添加getter和setter即可。無需實現Externalizable。 – Ulises

回答

1

使用

Gson gson = new GsonBuilder().create(); 
gson.toJson(new User(), System.out); 

生成以下的輸出:

{"username":"testname"} 

使用

<dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.2.4</version> 
    </dependency> 

w^hy你exxt 用戶:「testname」而不是用戶名:「testname」?

+0

哦,現在它工作。當我初始化Gson時,我強烈地離開了「.excludeFieldsWithoutExposeAnnotation()」。我將如何防止類中的正常變量現在被序列化?我應該使用瞬態? 編輯:由於username變量,它實際上返回{「username」:「testname」}。 writeExternal不會執行任何操作。 – MyNameIsHans

0

您需要將用戶名設置爲用戶O. bject。確保它連接到對象。

添加一個構造函數和更改類像下面這樣:

private String username; 

public User(){ 
this.username = "testuser"; 
} 
0

添加一個構造函數是這樣的:

public User(String username) { 
    this.username = username; 
    } 

創建方法命名getUsername()

public String getUsername() { 
    return username; 
    } 

這裏是你的代碼:

@Override 
    public void writeExternal(ObjectOutput out) throws IOException { 
    out.writeObject(username); 
    } 

欲瞭解更多信息看一看這個example