Gson版本:2.3.1
pom:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
1.基本用法
使用new Gson()或使用GsonBuilder.create方法创建Gson对象,然后使用toJson方法序列化或使用fromJson反序列化。
Person person = new Person();
//初始化...
Gson gson = new Gson();
gson.toJson(person);
2.TypeAdapter用法
当需要对对象属性做特殊转换时,可以使用TypeAdapter进行适配,示例如下:
NameAdapter.java
public class NameAdapter extends TypeAdapter<String> {
@Override
public void write(JsonWriter out, String value) throws IOException {
if (value != null && !"".equals(value)) {
String[] values = value.split(" ");
out.beginObject();
out.name("First Name").value(values[0]);
out.name("Last Name").value(values[1]);
out.endObject();
}
}
@Override
public String read(JsonReader in) throws IOException {
in.beginObject();
StringBuilder sb = new StringBuilder();
in.nextName();
sb.append(in.nextString()).append(" ");
in.nextName();
sb.append(in.nextString());
in.endObject();
return sb.toString();
}
}
Person.java
public class Person {
@JsonAdapter(NameAdapter.class)
private String name;
//其它属性和get、set方法省略
}
GsonTest.java
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
Person person = new Person();
person.setName("Will Smith"); // 拆分成{"First Name":"Will","Last Name":"Smith"}
person.setAge(40);
person.setCountry("America");
String json = gson.toJson(person);
System.out.println(json);
最后打印结果:{"name":{"First Name":"Will","Last Name":"Smith"},"country":"America","age":40}
3.ExclusionStrategy用法
当用户需要自定义序列化策略时,可以使用ExclusionStrategy进行定义,并在GsonBuilder创建Gson之前设置ExclusionStrategy。下面的例子是使用ExclusionStrategy实现@Ignore注解,使用该注解标注的属性不会进行序列化。
IgnoreStrategy.java
public class IgnoreStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(Ignore.class) != null;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}
Ignore.java
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ignore {
}
Person.java
public class Person {
@Ignore
private String privacy;
//其它属性和get、set方法省略
}
GsonTest.java
public static void main(String[] args) {
GsonBuilder builder = new GsonBuilder();
builder.addSerializationExclusionStrategy(new IgnoreStrategy());
Gson gson = builder.create();
Person person = new Person();
person.setName("Will Smith"); // 拆分成{"First Name":"Will","Last Name":"Smith"}
person.setAge(40);
person.setCountry("America");
person.setPrivacy("Something privacy"); // 不会被序列化
String json = gson.toJson(person);
System.out.println(json);
Person newPerson = gson.fromJson(json, Person.class);
System.out.println(newPerson);
}
输出结果:{"name":{"First Name":"Will","Last Name":"Smith"},"country":"America","age":40}
源码见附件
其它用法,待续。。。