开发手册 欢迎您!
软件开发者资料库

Gson - 序列化内部类

Gson序列化内部类 - 从简单和简单的步骤学习Gson,从基本到高级概念,包括概述,环境设置,第一个应用程序,Gson类,对象序列化,数据绑定,对象数据绑定,树模型,流API,序列化示例,数组,集合,泛型,序列化内部类,静态嵌套,非静态嵌套类,具有嵌套静态和非静态类的内部类,自定义类型适配器,自定义序列化,反序列化,空对象,版本控制支持,从序列化中排除字段。

在本章中,我们将解释具有内部类的类的序列化/反序列化.

嵌套的内部类示例

Student student = new Student(); student.setRollNo(1); Student.Name name = student.new Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); //serialize inner class object String nameString = gson.toJson(name); System.out.println(nameString); //deserialize inner class object   name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass());

示例

让我们看一个带有内部类的类的序列化/反序列化的示例.在C:\> GSON_WORKSPACE中创建名为 GsonTester 的Java类文件.

文件: GsonTester.java

import com.google.gson.Gson;  public class GsonTester {    public static void main(String args[]) {          Student student = new Student();        student.setRollNo(1);       Student.Name name = student.new Name();             name.firstName = "Mahesh";       name.lastName = "Kumar";       student.setName(name);       Gson gson = new Gson();             String jsonString = gson.toJson(student);       System.out.println(jsonString);        student = gson.fromJson(jsonString, Student.class);              System.out.println("Roll No: "+ student.getRollNo());       System.out.println("First Name: "+ student.getName().firstName);       System.out.println("Last Name: "+ student.getName().lastName);              String nameString = gson.toJson(name);       System.out.println(nameString);              name = gson.fromJson(nameString,Student.Name.class);       System.out.println(name.getClass());       System.out.println("First Name: "+ name.firstName);       System.out.println("Last Name: "+ name.lastName);    }      }  class Student {    private int rollNo;    private Name name;        public int getRollNo() {       return rollNo;    }      public void setRollNo(int rollNo) {       this.rollNo = rollNo;    }        public Name getName() {       return name;    }       public void setName(Name name) {       this.name = name;    }      class Name {       public String firstName;       public String lastName;    } }

验证结果

使用 javac编译类编译如下 :

C:\ GSON_WORKSPACE> javac GsonTester.java

现在运行GsonTester查看结果 :

C:\ GSON_WORKSPACE> java GsonTester

验证输出.

{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}} Roll No: 1 First Name: Mahesh Last Name: Kumar {"firstName":"Mahesh","lastName":"Kumar"} class Student$Name First Name: Mahesh Last Name: Kumar

嵌套静态内部类示例

Student student = new Student(); student.setRollNo(1); Student.Name name = new Student.Name(); name.firstName = "Mahesh"; name.lastName = "Kumar"; student.setName(name); //serialize static inner class object String nameString = gson.toJson(name); System.out.println(nameString); //deserialize static inner class object   name = gson.fromJson(nameString,Student.Name.class); System.out.println(name.getClass());

示例

让我们看一下带有静态内部类的类的序列化/反序列化的示例.在C:\> GSON_WORKSPACE中创建名为GsonTester的Java类文件.

文件: GsonTester.java

import com.google.gson.Gson;  public class GsonTester {    public static void main(String args[]) {          Student student = new Student();        student.setRollNo(1);       Student.Name name = new Student.Name();             name.firstName = "Mahesh";       name.lastName = "Kumar";        student.setName(name);             Gson gson = new Gson();       String jsonString = gson.toJson(student);       System.out.println(jsonString);        student = gson.fromJson(jsonString, Student.class);              System.out.println("Roll No: "+ student.getRollNo());       System.out.println("First Name: "+ student.getName().firstName);       System.out.println("Last Name: "+ student.getName().lastName);        String nameString = gson.toJson(name);       System.out.println(nameString);              name = gson.fromJson(nameString,Student.Name.class);       System.out.println(name.getClass());       System.out.println("First Name: "+ name.firstName);       System.out.println("Last Name: "+ name.lastName);    }      }  class Student {    private int rollNo;    private Name name;        public int getRollNo() {       return rollNo;    }        public void setRollNo(int rollNo) {       this.rollNo = rollNo;    }        public Name getName() {       return name;    }        public void setName(Name name) {       this.name = name;    }       static class Name {       public String firstName;       public String lastName;    } }

验证结果

使用 javac编译类编译如下 :

C:\ GSON_WORKSPACE> javac GsonTester.java

现在运行 GsonTester 查看结果 :

C:\ GSON_WORKSPACE> java GsonTester

验证输出.

{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}} Roll No: 1 First Name: Mahesh Last Name: Kumar {"firstName":"Mahesh","lastName":"Kumar"} class Student$Name First Name: Mahesh Last Name: Kumar