对象序列为json字符串时,可以指定对象中某些属性或者排除某些属性序列化为json字符串。Gson中提供了两种方式。
方式一
在要序列化的对象属性上用注解@Expose指定,并在创建Gson的时候,用excludeFieldsWithoutExposeAnnotation()激活注解。
public class Person {
private int id;
@Expose
private String name;
private String car;
@Expose
private int age;
/*省略get/set/toString方法*/
}
public static void main(String[] args) {
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();
/*把Person对象序列化为json字符串*/
Person person = new Person();
person.setId(1);
person.setName("lzj");
person.setCar("baoma");
person.setAge(27);
String json = gson.toJson(person);
System.out.println(json);
System.out.println("--------------------------");
/*把json字符串反序列化为Person对象*/
Person person2 = gson.fromJson(json, Person.class);
System.out.println(person2);
}
运行程序,输出如下
{"name":"lzj","age":27}
--------------------------
Pseron [id=0, name=lzj, car=null, age=27]
从输出可以看出,只有name和age属性被序列化了。
方式二
在创建Gson时,开启excludeFieldsWithModifiers(),排除指定标识的属性即可。
```
public class Person {
private int id;
public String name;
public String car;
private int age;
/*省略set/get/toString方法*/
public static void main(String[] args) {
GsonBuilder builder = new GsonBuilder();
/*序列化时排除private标识的属性*/
builder.excludeFieldsWithModifiers(Modifier.PRIVATE);
Gson gson = builder.create();
/*把Person对象序列化为json字符串*/
Person person = new Person();
person.setId(1);
person.setName("lzj");
person.setCar("baoma");
person.setAge(27);
String json = gson.toJson(person);
System.out.println(json);
System.out.println("--------------------------");
/*把json字符串反序列化为Person对象*/
Person person2 = gson.fromJson(json, Person.class);
System.out.println(person2);
}
运行程序,输出如下
{“name”:”lzj”,”car”:”baoma”}
Pseron [id=0, name=lzj, car=baoma, age=0]
“`