首先,為什么需要定制呢?很多同學(xué)可能覺得默認(rèn)的不也挺好的嘛?最開始,我也是覺得的,而且我們一開始也是用默認(rèn)的解析方式的,因為我們與外部約定的數(shù)據(jù)格式一直都比較穩(wěn)定。但當(dāng)外部數(shù)據(jù)不穩(wěn)定,那么Gson默認(rèn)配置的弊端就體現(xiàn)出來。很多同學(xué)可能覺得,你應(yīng)該叫后臺改啊,坦白說,我也覺得是這樣的,畢竟我們都是按協(xié)議去開發(fā)數(shù)據(jù)模型的,你不按約定的協(xié)議去做,不是你的鍋,難道是我的啊?!首先,一點是明確的,那就是如果后臺沒有按雙方之前約定的格式輸出數(shù)據(jù),那一定是后臺的問題,這點,我也不否認(rèn)的。
但是,我始終覺得,我們所有的開發(fā)和努力都應(yīng)該是為了更好地服務(wù)用戶而做的。簡而言之,我們是為產(chǎn)品的最終用戶負(fù)責(zé)的。而作為最靠近用戶一端的APP,責(zé)無旁貸地要肩負(fù)起這個潛在的責(zé)任。后臺數(shù)據(jù)錯了,我們可以認(rèn)為外部環(huán)境有問題了,APP運行的外部環(huán)境出問題了,當(dāng)然APP肯定很難獨善其身,但我們更應(yīng)該盡可能地減少對用戶的影響,而之后的分鍋大會畢竟是我們內(nèi)部的事了……
好,那我們說說,為什么Gson的默認(rèn)配置有那些對于我們來說事缺陷的問題,
1、一個字段有錯,則整個字段出錯。//但是我們希望這個字段出錯,就不要解析這個字段了;
2、字段如果是null的話,則該字段就為null。//但是我們希望所有字段不要有null值存在,特別是基本數(shù)據(jù)類型;
3、如果該字段是一個對象,則定義為String就報錯。//但是我們希望的是無論是什么字段,只要定義為String就永遠是對的;
而這些要求Gson的默認(rèn)配置都是不能滿足的,要自己去定義。很多同學(xué)可能覺得,要求這么多,還不如自己做個Json解析器得了。真心話是:不到萬不得已,不要自己去造輪子。因為人生苦短……,如果必須得造,也盡量參考成熟的輪子,畢竟已經(jīng)使用這么多年,總歸會有些經(jīng)驗值得借鑒的。
我們定制的時候更多也是參考內(nèi)置解析器去做的,有的是