Java Google Json (Gson) Serializing Inner classes

Serializing inner classes

Gson can serialize inner classes and static nested classes. The detailed example below demonstrates the following things.

  1. Serializing class containing static nested class
  2. Serializing class containing non static nested class (Inner class)
  3. De-serializing json to a class containing static and non static inner class
  4. Serializing static nested class (without the enclosing type)
  5. Serializing non static nested class (without the enclosing type)
  6. De-serializing json to a static nested class (without the enclosing type)
  7. De-serializing json to a non static nested class (without the enclosing type)
The Example
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.studytrails.json.gson;
 
import java.lang.reflect.Modifier;
 
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.studytrails.json.gson.AlbumsWithInnerClass.Dataset;
import com.studytrails.json.gson.AlbumsWithInnerClass.Dataset2;
 
public class SerializeInnerClassExample4 {
     public static void main(String[] args) {
         // create an Albums class with a static nested class and a non static
         // nested class
         AlbumsWithInnerClass albums =  new AlbumsWithInnerClass();
         albums.setName( "SerializeInnerClass" );
         // create a dataset. we need the enclosing type since this is a non
         // static nested class (inner class)
         Dataset dataset = albums. new Dataset();
         dataset.setAlbum_id( "1" );
         dataset.setAlbum_name( "albums1" );
         // assign the datasets to albums
         albums.setDatasetsInner( new Dataset[] { dataset });
 
         // static inner class can be created without the enclosing type
         Dataset2 dataset2 =  new Dataset2();
         dataset2.setAlbum_id( "2" );
         dataset2.setAlbum_name( "albums2" );
         albums.setDatasetsStatic( new Dataset2[] { dataset2 });
 
         // create the GsonBuilder
         GsonBuilder builder =  new GsonBuilder();
         // we ignore Private fields
         builder.excludeFieldsWithModifiers(Modifier.PRIVATE);
         Gson gson = builder.create();
 
         // serialize the albums object
         String json = gson.toJson(albums);
         System.out.println(json);
         // prints
         // {"name":"SerializeInnerClass","datasetsInner":[{"album_name":"SerializeInnerClass_albums1","album_id":"1"}],
         // "datasetsStatic":[{"album_name":"albums2","album_id":"2"}]}
 
         // We read the json string now and recreate the AlbumsWithInnerClass class
         Gson gson3 =  new Gson();
         AlbumsWithInnerClass parsedAlbums = gson3.fromJson(json, AlbumsWithInnerClass. class );
         System.out.println(parsedAlbums.datasetsInner[ 0 ].album_name);
         // prints SerializeInnerClass_albums1
         System.out.println(parsedAlbums.datasetsStatic[ 0 ].album_name);
         // prints albums2
 
         // now lets try and serialize only the object of inner class
         Gson gson2 =  new Gson();
         String json2 = gson2.toJson(dataset);
         System.out.println(json2);
         // prints {"album_name":"SerializeInnerClass_albums1","album_id":"1"}
 
         // serialize nested static class
         String json3 = gson2.toJson(dataset2);
         System.out.println(json3);
         // prints {"album_name":"albums2","album_id":"2"}
 
         // let us now create the inner class from the json string
         Gson gson4 =  new Gson();
         Dataset parsedDataset = gson4.fromJson(json2, Dataset. class );
         System.out.println(parsedDataset.getClass());
         // prints class com.studytrails.json.gson.AlbumsWithInnerClass$Dataset
         System.out.println(parsedDataset.album_name);
         // prints SerializeInnerClass_albums1
 
         // create nested static class from the json string
         Dataset2 parsedStaticNestedClass = gson4.fromJson(json3, Dataset2. class );
         System.out.println(parsedStaticNestedClass.getClass());
         // prints class com.studytrails.json.gson.AlbumsWithInnerClass$Dataset2
         System.out.println(parsedStaticNestedClass.album_name);
         // prints albums2
 
     }
}
The AlbumsWithInnerClass
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.studytrails.json.gson;
 
public class AlbumsWithInnerClass {
     public String name;
     private String year;
     public Dataset[] datasetsInner;
     public Dataset2[] datasetsStatic;
 
     public void setDatasetsInner(Dataset[] datasetsInner) {
         this .datasetsInner = datasetsInner;
     }
 
     public void setDatasetsStatic(Dataset2[] datasetsStatic) {
         this .datasetsStatic = datasetsStatic;
     }
 
     public void setName(String name) {
         this .name = name;
     }
 
     public void setYear(String year) {
         this .year = year;
     }
 
     class Dataset {
         public String album_name;
         public String album_id;
 
         public void setAlbum_id(String album_id) {
             this .album_id = album_id;
         }
 
         public void setAlbum_name(String album_name) {
             this .album_name = name +  "_" + album_name;
         }
     }
 
     static class Dataset2 {
         public String album_name;
         public String album_id;
 
         public void setAlbum_id(String album_id) {
             this .album_id = album_id;
         }
 
         public void setAlbum_name(String album_name) {
             this .album_name = album_name;
         }
     }
}

转载:http://www.studytrails.com/java/json/java-google-json-serialize-inner-classes.jsp

你可能感兴趣的:(Java Google Json (Gson) Serializing Inner classes)