Gson Null对象支持

Gson 生成优化的 Json 内容,默认忽略 NULL 值。但是GsonBuilder使用 GsonBuilder.serializeNulls() 方法提供了在 Json 输出中显示 NULL 值的标志。

GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
Gson gson = builder.create();

 

1. 没有serializeNulls调用的示例

在C:> GSON_WORKSPACE中创建名为 GsonTester 的Java类文件。

文件:GsonTester.java

import com.google.gson.Gson;  

public class GsonTester {
   public static void main(String args[]) {
      Gson gson = new Gson();  

      Student student = new Student();
      student.setRollNo(1);  
      String jsonString = gson.toJson(student);

      System.out.println(jsonString);  
      student = gson.fromJson(jsonString, Student.class);
      System.out.println(student);
   }      
}
class Student {
   private int rollNo;
   private String name;  

   public int getRollNo() {
      return rollNo;
   }  
   public void setRollNo(int rollNo) {
      this.rollNo = rollNo;
   }  
   public String getName() {
      return name;
   }  
   public void setName(String name) {
      this.name = name;
   }   
   public String toString() {
      return "Student[ name = "+name+", roll no: "+rollNo+ "]";
   }
}

验证结果

使用 javac 编译器编译类如下 -

C:\GSON_WORKSPACE>javac GsonTester.java

现在运行GsonTester查看结果 -

C:\GSON_WORKSPACE>java GsonTester

验证输出。

{"rollNo": 1}
Student[ name = null, roll no: 1]

 

2. serializeNulls调用的示例

在C:> GSON_WORKSPACE中创建名为GsonTester的Java类文件。

文件:GsonTester.java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;  

public class GsonTester {
   public static void main(String args[]) {
      GsonBuilder builder = new GsonBuilder();
      builder.serializeNulls();
      builder.setPrettyPrinting();
      Gson gson = builder.create();  

      Student student = new Student();
      student.setRollNo(1);  
      String jsonString = gson.toJson(student);

      System.out.println(jsonString);  
      student = gson.fromJson(jsonString, Student.class);
      System.out.println(student);
   }      
}
class Student {
   private int rollNo;
   private String name;  

   public int getRollNo() {
      return rollNo;
   }  
   public void setRollNo(int rollNo) {
      this.rollNo = rollNo;
   }  
   public String getName() {
      return name;
   }  
   public void setName(String name) {
      this.name = name;
   }   
   public String toString() {
      return "Student[ name = "+name+", roll no: "+rollNo+ "]";
   }
}

验证结果

使用 javac 编译器编译类如下:

C:\GSON_WORKSPACE>javac GsonTester.java

现在运行 GsonTester 查看结果:

C:\GSON_WORKSPACE>java GsonTester

验证输出。

{
   "rollNo": 1,
   "name": null
}
Student[ name = null, roll no: 1]

Gson提供 @Since 注释来控制基于其各种版本的类的 Json 序列化/反序列化。考虑以下具有版本控制支持的类。在这个类中,我们最初定义了两个变量 rollNo 和 name 以及稍后,我们添加了 验证 为新变量。 ...