利用gson解析和生成json数据(二)

本文介绍如何自定义枚举类型的序列化与反序列化过程,并展示如何通过Gson排除未标记@Expose的字段,实现部分属性转换为字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 包含枚举类型的对象转换成json字符串,首先需要定义一个实现JsonSerializer<T>,JsonDeserializer<T>接口的类

其中T代表我们自己定义的枚举类型

public class MySerializer implements JsonSerializer<ColorEnum>,JsonDeserializer<ColorEnum> {

		@Override
		public ColorEnum deserialize(JsonElement json, Type arg1,
				JsonDeserializationContext arg2) throws JsonParseException {
			// TODO Auto-generated method stub
			if (json.getAsInt() < ColorEnum.values().length) {
				return ColorEnum.values()[json.getAsInt()];
			}
			return null;
		}

		@Override
		public JsonElement serialize(ColorEnum colorEnum, Type arg1,
				JsonSerializationContext arg2) {
			// TODO Auto-generated method stub
			return new JsonPrimitive(colorEnum.ordinal());
		}
		
	} 
然后和普通的对象转换成json一样,如下:

JSONEnumEntity entity = new JSONEnumEntity("haha",ColorEnum.BLUE);
Gson gson7 = new Gson();
String jsonStr = gson7.toJson(entity);
System.out.println(jsonStr);



将对象中的部分属性转换成字符串,需要在要转换的字段上加上@export注解

Gson builder = new GsonBuilder()
		.excludeFieldsWithoutExposeAnnotation()
		.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss")
		.setPrettyPrinting()//格式化输出
		.setVersion(0)
		.create();
		
		StudentEntity entity = new StudentEntity(1,"张三",new Date(1992-1900,2,22));//年份需要减去1900,月份从0开始计算
		String jsonStr = builder.toJson(entity);
		System.out.println(jsonStr);
		//-----------------------------------------------------------------------------
		System.out.println("---------------------------------------------------------");
		List<StudentEntity>entityList = new ArrayList<StudentEntity>();
		StudentEntity entity2 = new StudentEntity(2,"李四",new Date(1993-1900,5,20,20,31,52));
		entityList.add(entity);
		entityList.add(entity2);
		Type entityListType = new TypeToken<List<StudentEntity>>() {}.getType();
		jsonStr = builder.toJson(entityList, entityListType);
		System.out.println(jsonStr);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值