Skip to content

Commit 68d6ca0

Browse files
committed
Gson自定义序列化和反序列化
1 parent 92bb765 commit 68d6ca0

3 files changed

Lines changed: 90 additions & 0 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
* [数组-反序列化](src/cn/aofeng/demo/json/gson/ArrayDeserialize.java)
3939
* [集合-序列化](src/cn/aofeng/demo/json/gson/CollectionsSerialize.java)
4040
* [集合-反序列化](src/cn/aofeng/demo/json/gson/CollectionDeserialize.java)
41+
* [自定义序列化](src/cn/aofeng/demo/json/gson/CustomSerialize.java)
42+
* [自定义反序列化](src/cn/aofeng/demo/json/gson/CustomDeserialize.java)
4143

4244
## 脚本语言
4345
* [在Java中执行JavaScript脚本](src/cn/aofeng/demo/script/ScriptRunPerformence.java)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package cn.aofeng.demo.json.gson;
2+
3+
import java.lang.reflect.Type;
4+
5+
import com.google.gson.Gson;
6+
import com.google.gson.GsonBuilder;
7+
import com.google.gson.JsonDeserializationContext;
8+
import com.google.gson.JsonDeserializer;
9+
import com.google.gson.JsonElement;
10+
import com.google.gson.JsonObject;
11+
import com.google.gson.JsonParseException;
12+
13+
/**
14+
* 自定义反序列化。
15+
*
16+
* @author <a href="mailto:[email protected]">聂勇</a>
17+
*/
18+
public class CustomDeserialize {
19+
20+
public static void main(String[] args) {
21+
GsonBuilder builder = new GsonBuilder();
22+
builder.registerTypeAdapter(Person.class, new PersonDeserializer());
23+
Gson gson = builder.create();
24+
25+
String json = "{\"PersonName\":\"aofeng\",\"PersonAge\":32}";
26+
Person obj = gson.fromJson(json, Person.class);
27+
System.out.println(obj); // 输出结果:Person [name=aofeng, age=32]
28+
}
29+
30+
public static class PersonDeserializer implements JsonDeserializer<Person> {
31+
32+
@Override
33+
public Person deserialize(JsonElement jsonEle, Type type,
34+
JsonDeserializationContext context)
35+
throws JsonParseException {
36+
JsonObject jo = jsonEle.getAsJsonObject();
37+
String name = jo.get("PersonName").getAsString();
38+
int age = jo.get("PersonAge").getAsInt();
39+
40+
Person obj = new Person(name, age);
41+
return obj;
42+
}
43+
44+
} // end of PersonDeserializer
45+
46+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cn.aofeng.demo.json.gson;
2+
3+
import java.lang.reflect.Type;
4+
5+
import com.google.gson.Gson;
6+
import com.google.gson.GsonBuilder;
7+
import com.google.gson.JsonElement;
8+
import com.google.gson.JsonObject;
9+
import com.google.gson.JsonSerializationContext;
10+
import com.google.gson.JsonSerializer;
11+
12+
/**
13+
* 自定义序列化。
14+
*
15+
* @author <a href="mailto:[email protected]">聂勇</a>
16+
*/
17+
public class CustomSerialize {
18+
19+
public static void main(String[] args) {
20+
GsonBuilder builder = new GsonBuilder();
21+
builder.registerTypeAdapter(Person.class, new PersonSerializer());
22+
Gson gson = builder.create();
23+
24+
Person obj = new Person("aofeng", 32);
25+
System.out.println( gson.toJson(obj) ); // 输出结果:{"PersonName":"aofeng","PersonAge":32}
26+
}
27+
28+
public static class PersonSerializer implements JsonSerializer<Person> {
29+
30+
@Override
31+
public JsonElement serialize(Person obj, Type type,
32+
JsonSerializationContext context) {
33+
JsonObject jo = new JsonObject();
34+
jo.addProperty("PersonName", obj.getName());
35+
jo.addProperty("PersonAge", obj.getAge());
36+
37+
return jo;
38+
}
39+
40+
} // end of PersonSerializer
41+
42+
}

0 commit comments

Comments
 (0)