Gson特殊用法

2021-08-08 03:42:09 字數 2486 閱讀 8626

參考文章:

正常用法:

gson gson = new gson();

object obj = gson.fromjson(str,object.class);

string gsonstr = gson.tojson(obj);

就這樣,就可以了。

但是有些特殊情況,可能要特殊處理,這裡先說一些正常的,非伺服器錯誤的情況:

(1)數字型別返回null

處理方法1:

gson gson = new gsonbuilder()

.registertypeadapter(integer.class, new jsondeserializer() catch (numberformatexception e) }})

.create();

system.out.println(gson.tojson(100)); //結果:100

system.out.println(gson.fromjson("\"\"", integer.class)); //結果-1

或,處理方法2:

gson gson = new gsonbuilder()

.registertypeadapter(integer.class, new typeadapter()

@override

public integer read(jsonreader in) throws ioexception catch (numberformatexception e) }})

.create();

system.out.println(gson.tojson(100)); // 結果:"100"

system.out.println(gson.fromjson("\"\"",integer.class)); // 結果:-1

registertypeadapter這個方法個人理解為攔截,對序列化,反序列化,gson讀寫等攔截,

其中:

typeadapter:攔截全部,萬用,所有處理可放在這裡

jsonserializer:攔截序列化過程

jsondeserializer:攔截反序列化過程

另外,伺服器可能不返回空欄位,如伺服器在不具備某欄位(為空時不返回)當b為空時伺服器返回,這種情況需要加serializenulls()這種情況的處理:

.registertypeadapter(xx.class, new xxadapter())

子類全部處理:registertypehierarchyadapter

泛型類使用typeadapter(可以通過用jsonserializer和jsondeserializer避免):

type

type

=new typetoken<

list

>() {}.gettype();

typeadapter typeadapter =

new typeadapter<

list

>() ;

gson gson =

new gsonbuilder()

.registertypeadapter(type, typeadapter)

.create();

list

list

=new arraylist<>();

list

.add(new user("a",11));

list

.add(new user("b",22));

//注意,多了個type引數

string result = gson.tojson(list, type);

伺服器返回為空時為」「

gson gson = new gsonbuilder().registertypehierarchyadapter(list.class, new jsondeserializer<?>>() 

return

list;

} else

}}).create();

好感謝公司的後台程式設計師,沒給android傳資料帶來什麼**煩。其實如果伺服器返回資料正常,一直用一種型別,且沒有json錯誤,為空時返回正常,android端是基本不用處理的。但不保證用第三方的時候,返回資料一直正常無誤,所以特別記錄下。

附:空值預防(

public

class

xxadapter

extends

typeadapter

return reader.nextstring();

}@override

public void write(jsonwriter writer, string value) throws ioexception

writer.value(value);

}}

Gson的用法例項

public class namereq public void setmailno string mailno public string getorgcode public void setorgcode string orgcode namereq namereq gson.fromjson ...

JSONObject和Gson用法詳解

json lib 2.4 jdk15.jar commons beanutils 1.8.3.jar commons collections 3.2.1.jar commons lang 2.5.jar commons logging 1.1.1.jar ezmorph 1.0.6.jar一般情況下...

define 特殊用法

define conn x,y x y define tochar x x define tostring x x x y表示什麼?表示x連線y,舉例說 int n conn 123,456 結果就是n 123456 char str conn asdf adf 結果就是 str asdfadf 再...