目录
@SerializedName和transient
@Expose
@SerializedName和transient
@SerializedName | 自定义序列化与反序列化过程中json数据的的key |
transient | 加这个关键字表示这个字段 不会参与任何的序列化与反序列化 |
看代码
该商品类,name字段加上@SerializedName("goodsName")注解,表示将json数据的key显示为goodsName
color这个字段加transient关键字,表示color这个字段不管是序列化还是反序列化都不被解析
package com.example.myjson;import com.google.gson.Gson;import org.junit.Test;public class Test2 {@Testpublic void testSpecial(){Goods2 goods = new Goods2("apple",15.2,8,"green");String json = new Gson().toJson(goods);System.out.println("序列化:"+json);System.out.println("反序列化:"+new Gson().fromJson(json,Goods2.class));//color这个字段没有被解析出来System.out.println("反序列化:"+new Gson().fromJson("{\"goodsName\":\"melon\",\"price\":12,\"count\":6,\"color\":\"red\"}",Goods2.class));}}
结果
@Expose
1 创建gson对象时,用new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()创建,让 @Expose 注解生效 |
2 加@Expose注解,默认表示serialize = true,deserialize = true,即这个字段序列化和反序列化都参与 |
3 加@Expose注解,通过更改serialize和deserialize的值true /false,控制该字段是否序列化、反序列化 |
4 不加@Expose注解,默认表示serialize = false,deserialize = false,即这个字段序列化和反序列化都不参与 |
price这个字段 不参与序列化,参与反序列化 count这个字段 序列化和反序列化都不参与
package com.example.myjson;import com.google.gson.Gson;
import com.google.gson.GsonBuilder;import org.junit.Test;public class Test3 {@Testpublic void testSpecial(){Goods3 goods = new Goods3("apple",15.2,8,"green");//序列化//解析 @Expose注解Gson gsonExpose = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();String json = gsonExpose.toJson(goods);System.out.println("序列化:"+json);System.out.println("反序列化:"+gsonExpose.fromJson(json,Goods3.class));System.out.println("反序列化:"+gsonExpose.fromJson("{\"name\":\"berry\",\"price\":3.00,\"count\":3\",\"color\":\"yellow\"}",Goods3.class));}}
结果