1. 默認(rèn)情況下, GSON從序列化/反序列化過(guò)程中排除瞬態(tài)和靜態(tài)字段。
2. 例子
2.1. 新建一個(gè)名為GsonExcludeFields的Java項(xiàng)目, 同時(shí)添加相關(guān)jar包,。
2.2. 新建Student.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public static void main(String[] args) { // 創(chuàng)建一個(gè)學(xué)生對(duì)象 Student student = new Student(1111, "小明", 21); Student.className = "VI"; GsonBuilder builder = new GsonBuilder(); builder.setPrettyPrinting(); // 3. 創(chuàng)建Gson對(duì)象 Gson gson = builder.create(); // 4. JavaBean轉(zhuǎn)化為JSON字符串 String jsonString = gson.toJson(student); System.out.println(jsonString);
2.3. 新建App1.java
import com.google.gson.annotations.Expose; private transient int id; public static String className; public Student(int id, String name, int age) { public void setId(int id) { public String getName() { public void setName(String name) { public void setAge(int age) { public String toString() { return "Student [name: " + name + ", age: " + age + "]";
2.4. 運(yùn)行App1.java
3. 使用excludeFieldsWithModifiers
3.1. GsonBuilder使用來(lái)自序列化/反序列化過(guò)程的excludeFieldsWithModifiers()方法控制排除使用特定修飾符的字段,。
3.2. 新建App2.java
import java.lang.reflect.Modifier; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public static void main(String[] args) { // 創(chuàng)建一個(gè)學(xué)生對(duì)象 Student student = new Student(1111, "小明", 21); Student.className = "VI"; GsonBuilder builder = new GsonBuilder(); builder.excludeFieldsWithModifiers(Modifier.TRANSIENT); builder.setPrettyPrinting(); // 4. 創(chuàng)建Gson對(duì)象 Gson gson = builder.create(); // 5. JavaBean轉(zhuǎn)化為JSON字符串 String jsonString = gson.toJson(student); System.out.println(jsonString);
3.3. 運(yùn)行App2.java
4. 使用@Expose Annotation
4.1. Gson提供@Expose注解根據(jù)其修飾范圍來(lái)控制類的序列化/反序列化。
4.2. GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法來(lái)指示只有@Expose修飾的字段才進(jìn)行序列化/反序列化,。瞬態(tài)和靜態(tài)字段即使使用@Expose修飾依然被排除,。
4.3. 新建App3.java
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public static void main(String[] args) { // 創(chuàng)建一個(gè)學(xué)生對(duì)象 Student student = new Student(1111, "小明", 21); Student.className = "VI"; GsonBuilder builder = new GsonBuilder(); // 2. 只序列化/反序列化使用@Expose修飾的字段, 瞬態(tài)和靜態(tài)字段即使使用@Expose修飾依然被排除 builder.excludeFieldsWithoutExposeAnnotation(); builder.setPrettyPrinting(); // 4. 創(chuàng)建Gson對(duì)象 Gson gson = builder.create(); // 5. JavaBean轉(zhuǎn)化為JSON字符串 String jsonString = gson.toJson(student); System.out.println(jsonString);
4.4. 運(yùn)行App3.java
|