Gson不解析屬性及其重命名

json在日常開(kāi)發(fā)中有2種情況是經(jīng)常要處理的旱物。一種是json字段與類屬性不一致蘸朋。比如蛇形轉(zhuǎn)駝峰捉片,另一種情況部分屬性不序列化

SerializedName注解

SerializedName 用于json屬性與對(duì)象屬性名映射關(guān)系;
SerializedName 有2個(gè)屬性艺骂。value诸老,alternate 。
value:序列化或反序列化時(shí)字段的期望名稱钳恕。
alternate:該字段在反序列化時(shí)的其他名稱别伏。
這2個(gè)屬性什么意識(shí)呢?其實(shí)就是我們一般起別名就是因?yàn)樵搄son是由其他語(yǔ)言規(guī)范序列化的來(lái)的忧额,但是如果這個(gè)對(duì)象我們也要序列化返回給其他人使用直接使用默認(rèn)的SerializedName明顯不合適因?yàn)樾蛄谢闹祵⑹瞧渌Z(yǔ)言的規(guī)范所以設(shè)置value為java的規(guī)范厘肮,alternate為其他語(yǔ)言的規(guī)范。這樣反序列使用其他語(yǔ)言宙址。
ps:注意如果json中同事出現(xiàn)value 和alternate 包含的值轴脐,反序列的結(jié)果將是json串中后出現(xiàn)的值

Expose注解

Expose 用戶具體屬性的顯示调卑;
Expose有2個(gè)屬性 serialize, deserialize 這2個(gè)屬性默認(rèn)都是true;如果有需求可以自定義抡砂;
不過(guò)要該注解生效大咱。Gson對(duì)象不能使用new Gson()來(lái)創(chuàng)建對(duì)象。應(yīng)該使用new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 來(lái)構(gòu)建
Gson excludeGson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

示例代碼


import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class OrderRequest {

    /**
     * 用戶標(biāo)識(shí)
     */
    @Expose(serialize = false)
    @SerializedName("user_id")
    private String userId;
    /**
     * 商品標(biāo)識(shí)
     */
    @Expose(deserialize = false)
    @SerializedName("goods_id")
    private String goodsId;
    /**
     * 價(jià)格
     */
    private int price;
    @Expose
    @SerializedName("order_no")
    private String orderNo;

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return String.format("userId:%s ,goodsId:%s,price:%d,orderNo:%s", userId, goodsId, price, orderNo);
    }
}

測(cè)試用例

對(duì)象序列化json

@Test
public void testSerialization() {
    OrderRequest request = new OrderRequest();
    request.setPrice(10);
    request.setGoodsId("g01");
    request.setUserId("1");
    request.setOrderNo("20180331100001");
    Gson gson = new Gson();
    System.out.println("Gson:" + gson.toJson(request));
    Gson excludeGson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    System.out.println("ExcludeGson:" + excludeGson.toJson(request));
}

輸出結(jié)果

Gson:{"user_id":"1","goods_id":"g01","price":10,"order_no":"20180331100001"}
ExcludeGson:{"goods_id":"g01","order_no":"20180331100001"}

對(duì)象反序列化

@Test
public void testDeserialization() {
    String json = "{\"user_id\":\"1\",\"goods_id\":\"goods\",\"price\":10,\"order_no\":\"20180331100001\"}";
    Gson gson = new Gson();
    System.out.println(gson.fromJson(json, OrderRequest.class));
    Gson excludeGson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    System.out.println(excludeGson.fromJson(json, OrderRequest.class));
}

輸出結(jié)果

userId:1 ,goodsId:goods,price:10,orderNo:20180331100001
userId:1 ,goodsId:null,price:0,orderNo:20180331100001
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末注益,一起剝皮案震驚了整個(gè)濱河市碴巾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丑搔,老刑警劉巖厦瓢,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異啤月,居然都是意外死亡煮仇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門谎仲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浙垫,“玉大人,你說(shuō)我怎么就攤上這事郑诺〖欣眩” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵辙诞,是天一觀的道長(zhǎng)辙售。 經(jīng)常有香客問(wèn)我,道長(zhǎng)飞涂,這世上最難降的妖魔是什么旦部? 我笑而不...
    開(kāi)封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮较店,結(jié)果婚禮上志鹃,老公的妹妹穿的比我還像新娘。我一直安慰自己泽西,他們只是感情好曹铃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著捧杉,像睡著了一般陕见。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上味抖,一...
    開(kāi)封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天评甜,我揣著相機(jī)與錄音,去河邊找鬼仔涩。 笑死忍坷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佩研,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柑肴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旬薯?” 一聲冷哼從身側(cè)響起晰骑,我...
    開(kāi)封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绊序,沒(méi)想到半個(gè)月后硕舆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骤公,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年抚官,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阶捆。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耗式,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趁猴,到底是詐尸還是另有隱情刊咳,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布儡司,位于F島的核電站娱挨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捕犬。R本人自食惡果不足惜跷坝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碉碉。 院中可真熱鬧柴钻,春花似錦、人聲如沸垢粮。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜡吧。三九已至毫蚓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昔善,已是汗流浹背元潘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留君仆,地道東北人翩概。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓牲距,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钥庇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牍鞠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容