日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GSON使用笔记(1) -- 序列化时排除字段的几种方式

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GSON使用笔记(1) -- 序列化时排除字段的几种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/zxhoo/article/details/21471005

GSON是Google發布的JSON序列化/反序列化工具,非常容易使用。本文簡要討論在使用GSON將Java對象轉成JSON時,如何排除某些字段。

?

最簡單的用法

假設有下面這個類:

?

[java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????public?int?x;??
  • ????public?int?y;??
  • ??????
  • ????public?MyObj(int?x,?int?y)?{??
  • ????????this.x?=?x;??
  • ????????this.y?=?y;??
  • ????}??
  • ??????
  • }??

  • 最簡單的GSON用法如下所示:

    ?

    ?

    [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????MyObj?obj?=?new?MyObj(1,?2);??
  • ????String?json?=?new?Gson().toJson(obj);??
  • ????Assert.assertEquals("{\"x\":1,\"y\":2}",?json);??
  • }??
  • ?

    方法1:排除null字段

    null字段,默認就不會序列化的,如下所示:

    ?

    [java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????private?int?intField;??
  • ????private?String?strField;??
  • ??????
  • }??
  • [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????MyObj?obj?=?new?MyObj();??
  • ????Assert.assertEquals("{\"intField\":0}",?new?Gson().toJson(obj));??
  • }??
  • 要想序列化null字段,需要顯示的進行設置:

    ?

    ?

    [java]?view plaincopy
  • @Test??
  • public?void?serializeNulls()?{??
  • ????MyObj?obj?=?new?MyObj();??
  • ????Gson?gson?=?new?GsonBuilder().serializeNulls().create();??
  • ????Assert.assertEquals("{\"intField\":0,\"strField\":null}",?gson.toJson(obj));??
  • }??
  • ?

    方法2:排除transient字段

    這個方法最簡單,給字段加上transient修飾符就可以了,如下所示:

    ?

    [java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????public?transient?int?x;?//?<---??
  • ????public?int?y;??
  • ??????
  • ????public?MyObj(int?x,?int?y)?{??
  • ????????this.x?=?x;??
  • ????????this.y?=?y;??
  • ????}??
  • ??????
  • }??
  • [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????MyObj?obj?=?new?MyObj(1,?2);??
  • ????String?json?=?new?Gson().toJson(obj);??
  • ????Assert.assertEquals("{\"y\":2}",?json);?//?<---??
  • }??
  • ?

    方法3:排除Modifier為指定類型的字段

    這個方法需要用GsonBuilder定制一個GSON實例,如下所示:

    ?

    [java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????protected?int?x;?//?<---??
  • ????public?int?y;??
  • ??????
  • ????public?MyObj(int?x,?int?y)?{??
  • ????????this.x?=?x;??
  • ????????this.y?=?y;??
  • ????}??
  • ??????
  • }??
  • [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????Gson?gson?=?new?GsonBuilder()??
  • ????????????.excludeFieldsWithModifiers(Modifier.PROTECTED)?//?<---??
  • ????????????.create();??
  • ??????
  • ????MyObj?obj?=?new?MyObj(1,?2);??
  • ????String?json?=?gson.toJson(obj);?//?<---??
  • ????Assert.assertEquals("{\"y\":2}",?json);??
  • }??
  • ?

    方法4:使用@Expose注解

    注意,沒有被@Expose標注的字段會被排除,如下所示:

    [java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????public?int?x;??
  • ????@Expose?public?int?y;?//?<---??
  • ??????
  • ????public?MyObj(int?x,?int?y)?{??
  • ????????this.x?=?x;??
  • ????????this.y?=?y;??
  • ????}??
  • ??????
  • }??
  • [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????Gson?gson?=?new?GsonBuilder()??
  • ????????????.excludeFieldsWithoutExposeAnnotation()?//?<---??
  • ????????????.create();??
  • ??????
  • ????MyObj?obj?=?new?MyObj(1,?2);??
  • ????String?json?=?gson.toJson(obj);??
  • ????Assert.assertEquals("{\"y\":2}",?json);??
  • }??
  • ?

    方法5:使用ExclusionStrategy定制字段排除策略

    這種方式最靈活,下面的例子把所有以下劃線開頭的字段全部都排除掉:

    ?

    [java]?view plaincopy
  • class?MyObj?{??
  • ??????
  • ????public?int?_x;?//?<---??
  • ????public?int?y;??
  • ??????
  • ????public?MyObj(int?x,?int?y)?{??
  • ????????this._x?=?x;??
  • ????????this.y?=?y;??
  • ????}??
  • ??????
  • }??
  • [java]?view plaincopy
  • @Test??
  • public?void?gson()?{??
  • ????ExclusionStrategy?myExclusionStrategy?=?new?ExclusionStrategy()?{??
  • ??
  • ????????@Override??
  • ????????public?boolean?shouldSkipField(FieldAttributes?fa)?{??
  • ????????????return?fa.getName().startsWith("_");?//?<---??
  • ????????}??
  • ??
  • ????????@Override??
  • ????????public?boolean?shouldSkipClass(Class<?>?clazz)?{??
  • ????????????return?false;??
  • ????????}??
  • ??????????
  • ????};??
  • ??????
  • ????Gson?gson?=?new?GsonBuilder()??
  • ????????????.setExclusionStrategies(myExclusionStrategy)?//?<---??
  • ????????????.create();??
  • ??????
  • ????MyObj?obj?=?new?MyObj(1,?2);??
  • ????String?json?=?gson.toJson(obj);??
  • ????Assert.assertEquals("{\"y\":2}",?json);??
  • }??


  • ?

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的GSON使用笔记(1) -- 序列化时排除字段的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。