2016-01-29 39 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