Serializing Inner Classes
序列化的类类型:
1. 包含静态内部类的普通类
2. 包含非静态内部类的普通类
3. 静态内部类
4.非静态内部类
5.局部类(序列化后是NULL)
import java.lang.reflect.Modifier;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class AlbumsWithInnerClass {
public String name;
private String year;
public InnerDataset[] datasetsInner;
public InnerDataset2[] datasetsStatic;
public void setDatasetsInner(InnerDataset[] datasetsInner) {
this.datasetsInner = datasetsInner;
}
public void setDatasetsInnerStatic(InnerDataset2[] datasetsInner) {
this.datasetsStatic = datasetsInner;
}
public void setName(String name) {
this.name = name;
}
public void setYear(String year) {
this.year = year;
}
class InnerDataset {
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 InnerDataset2 {
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;
}
}
}
public class ParseInnerClassTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个包含静态内部类和非静态内部类的实例
AlbumsWithInnerClass albums = new AlbumsWithInnerClass();
albums.setName("SerializeInnerClass");
//创建非静态内部类实例
AlbumsWithInnerClass.InnerDataset dataset = albums.new InnerDataset();
dataset.setAlbum_id("1");
dataset.setAlbum_name("Albums1");
albums.setDatasetsInner(new AlbumsWithInnerClass.InnerDataset[] { dataset });
//创建静态内部类实例
AlbumsWithInnerClass.InnerDataset2 dataset2 = new AlbumsWithInnerClass.InnerDataset2();
dataset2.setAlbum_id("2");
dataset2.setAlbum_name("albums2");
albums.setDatasetsInnerStatic(new AlbumsWithInnerClass.InnerDataset2[]{dataset2});
GsonBuilder builder = new GsonBuilder();
//转化json序列时忽视private域
builder.excludeFieldsWithModifiers(Modifier.PRIVATE);
builder.setPrettyPrinting();
Gson gson = builder.create();
String json = gson.toJson(albums);
System.out.println(json);
AlbumsWithInnerClass parsedAlbums = gson.fromJson(json, AlbumsWithInnerClass.class);
System.out.println(parsedAlbums.datasetsInner[0].album_name);
System.out.println(parsedAlbums.datasetsStatic[0].album_name);
//内部类的序列化的
String jsonInnerClass = gson.toJson(dataset);
System.out.println(jsonInnerClass);
String jsonStaticInnerClass = gson.toJson(dataset2);
System.out.println(jsonStaticInnerClass);
//局部类是不会被序列化
class LocalDummyClass {
public String name;
public String id;
}
LocalDummyClass localDummyClass = new LocalDummyClass();
localDummyClass.name = "Dummy";
localDummyClass.id = "123";
String myJsonInnerClass = gson.toJson(localDummyClass);
System.out.println(myJsonInnerClass);
}
}
参考文章: Java Google Json (Gson) Serializing Inner classes