Gson基本用法

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}

源码见附件
其它用法,待续。。。

猜你喜欢

转载自gd-shan.iteye.com/blog/2234222