Gson can serialize inner classes and static nested classes. The detailed example below demonstrates the following things.
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
}
}
|
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
|