目录
@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 {
@Test
public 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 {
@Test
public 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));
}
}
结果