Gson使用方法之Serializing Inner Classes

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值