1.使用@Expose可以区分实体中不想被序列化的属性


@Expose标签的2个属性. 

1.1 deserialize 
  (boolean) 反序列化 默认 true 
 
     
 1.2  
 serialize 
   (boolean) 序列化 默认 true


    使用

 new

 GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 创建Gson对象,没有@Expose注释的属性将不会被序列化.


Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。

举个例子:

网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。--这里只讲了一个网络传输方面的应用,其实还有很多作用的



public 
   
 class 
  User {

@Expose
private String username;
@Expose(serialize=false)
private int age ;

private List<String> list;

public User(String username, int age) {
super();
this.username = username;
this.age = age;
}

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}

public static void main(String []args){
User user = new User("lemon",27);
List<String> list = new ArrayList<String>();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
System.out.println(g1.toJson(user)); //{"username":"lemon","age":27,"list":["l1","l2"]}
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(g2.toJson(user)); //{"username":"lemon"}


  }

}



2.使用@ SerializedName标签定义属性序列化 后的名字


@Expose
@SerializedName("name")
private String username;

public static void main(String []args){
User user = new User("lemon",27);
List<String> list = new ArrayList<String>();
list.add("l1");
list.add("l2");
user.setList(list);
Gson g1 = new Gson();
//使用 new Gson();
//{"name":"lemon","age":27,"list":["l1","l2"]}
System.out.println(g1.toJson(user)); 
//使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Gson g2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
//{"name":"lemon"}
System.out.println(g2.toJson(user)); 
}