首先,為什么需要定制呢?很多同學(xué)可能覺得默認(rèn)的不也挺好的嘛?最開始,我也是覺得的,而且我們一開始也是用默認(rèn)的解析方式的,因?yàn)槲覀兣c外部約定的數(shù)據(jù)格式一直都比較穩(wěn)定。但當(dāng)外部數(shù)據(jù)不穩(wěn)定,那么Gson默認(rèn)配置的弊端就體現(xiàn)出來。很多同學(xué)可能覺得,你應(yīng)該叫后臺(tái)改啊,坦白說,我也覺得是這樣的,畢竟我們都是按協(xié)議去開發(fā)數(shù)據(jù)模型的,你不按約定的協(xié)議去做,不是你的鍋,難道是我的???!首先,一點(diǎn)是明確的,那就是如果后臺(tái)沒有按雙方之前約定的格式輸出數(shù)據(jù),那一定是后臺(tái)的問題,這點(diǎn),我也不否認(rèn)的。

  但是,我始終覺得,我們所有的開發(fā)和努力都應(yīng)該是為了更好地服務(wù)用戶而做的。簡而言之,我們是為產(chǎn)品的最終用戶負(fù)責(zé)的。而作為最靠近用戶一端的APP,責(zé)無旁貸地要肩負(fù)起這個(gè)潛在的責(zé)任。后臺(tái)數(shù)據(jù)錯(cuò)了,我們可以認(rèn)為外部環(huán)境有問題了,APP運(yùn)行的外部環(huán)境出問題了,當(dāng)然APP肯定很難獨(dú)善其身,但我們更應(yīng)該盡可能地減少對用戶的影響,而之后的分鍋大會(huì)畢竟是我們內(nèi)部的事了……

  好,那我們說說,為什么Gson的默認(rèn)配置有那些對于我們來說事缺陷的問題,

  1、一個(gè)字段有錯(cuò),則整個(gè)字段出錯(cuò)。//但是我們希望這個(gè)字段出錯(cuò),就不要解析這個(gè)字段了;

  2、字段如果是null的話,則該字段就為null。//但是我們希望所有字段不要有null值存在,特別是基本數(shù)據(jù)類型;

  3、如果該字段是一個(gè)對象,則定義為String就報(bào)錯(cuò)。//但是我們希望的是無論是什么字段,只要定義為String就永遠(yuǎn)是對的;

  而這些要求Gson的默認(rèn)配置都是不能滿足的,要自己去定義。很多同學(xué)可能覺得,要求這么多,還不如自己做個(gè)Json解析器得了。真心話是:不到萬不得已,不要自己去造輪子。因?yàn)槿松喽獭绻仨毜迷?,也盡量參考成熟的輪子,畢竟已經(jīng)使用這么多年,總歸會(huì)有些經(jīng)驗(yàn)值得借鑒的。

  我們定制的時(shí)候更多也是參考內(nèi)置解析器去做的,有的是