生活随笔
收集整理的這篇文章主要介紹了
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) -- 序列化时排除字段的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。