Android gson解析@SerializedName、transient、@Expose

目录

@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 {

    @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));

    }


}

结果


版权声明:本文为m0_45877477原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。