自定義型別介面卡的Gson工具類
在android開發以及javaEE的開發過程中,我們需要解析json,下面我為大家提供一個已經封裝好的工具類,在使用過程中,完全不需要再對gson作處理。一行程式碼即可以實現轉換
public final class JsonUtil {
private JsonUtil(){}
/**
* 物件轉換成json字串
* @param obj
* @return
*/
public static String toJson(Object obj) {
Gson gson = new GsonBuilder().registerTypeAdapter(Integer.class, new IntegerDefault0Adapter())
.registerTypeAdapter(int.class, new IntegerDefault0Adapter())
.registerTypeAdapter(Double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(Long.class, new LongDefault0Adapter())
.registerTypeAdapter(long.class, new LongDefault0Adapter())
.create();
return gson.toJson(obj);
}
/**
* json字串轉成物件
* @param str
* @param type
* @return
*/
public static <T> T fromJson(String str, Type type) {
Gson gson = new GsonBuilder().registerTypeAdapter(Integer.class, new IntegerDefault0Adapter())
.registerTypeAdapter(int.class, new IntegerDefault0Adapter())
.registerTypeAdapter(Double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(Long.class, new LongDefault0Adapter())
.registerTypeAdapter(long.class, new LongDefault0Adapter())
.create();
return gson.fromJson(str, type);
}
/**
* json字串轉成物件
* @param str
* @param type
* @return
*/
public static <T> T fromJson(String str, Class<T> type) {
Gson gson = new GsonBuilder().registerTypeAdapter(Integer.class, new IntegerDefault0Adapter())
.registerTypeAdapter(int.class, new IntegerDefault0Adapter())
.registerTypeAdapter(Double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(double.class, new DoubleDefault0Adapter())
.registerTypeAdapter(Long.class, new LongDefault0Adapter())
.registerTypeAdapter(long.class, new LongDefault0Adapter())
.create();
return gson.fromJson(str, type);
}
}
在這裡,我們使用了IntegerDefault0Adapter,DoubleDefault0Adapter,LongDefault0Adapter自定義型別介面卡,用來解決解析過程中的型別轉換異常
IntegerDefault0Adapter.java
public class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定義為int型別,如果後臺返回""或者null,則返回0
return 0;
}
} catch (Exception ignore) {
}
try {
return json.getAsInt();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
@Override
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
DoubleDefault0Adapter.java
public class DoubleDefault0Adapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
@Override
public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定義為double型別,如果後臺返回""或者null,則返回0.00
return 0.00;
}
} catch (Exception ignore) {
}
try {
return json.getAsDouble();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
@Override
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
LongDefault0Adapter.java
public class LongDefault0Adapter implements JsonSerializer<Long>, JsonDeserializer<Long> {
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定義為long型別,如果後臺返回""或者null,則返回0
return 0l;
}
} catch (Exception ignore) {
}
try {
return json.getAsLong();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
@Override
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
相關推薦
自定義型別介面卡的Gson工具類
在android開發以及javaEE的開發過程中,我們需要解析json,下面我為大家提供一個已經封裝好的工具類,在使用過程中,完全不需要再對gson作處理。一行程式碼即可以實現轉換 public final class JsonUtil { priv
Android自定義介面卡父類繼承BaseAdapter,自定義生成對話方塊工具類
工作內容: 1.不使用SQLiteHelper獲取本地資料庫中的表的內容 2.自定義介面卡父類 3.自定義生成對話方塊的工具類 學習分享: 1.不使用SQLiteHelper,直接找到本地資料庫檔案開啟,並獲取其中的表內容 SQLiteDatabase sqliteDat
自定義MVC框架之工具類-模型類
else pri 數據庫連接 執行 field date http one www. 截止目前已經改造了5個類: ubuntu:通過封裝驗證碼類庫一步步安裝php的gd擴展 自定義MVC框架之工具類-分頁類的封裝 自定義MVC框架之工具類-文件上傳類 自定義MVC框
java自定義排程定時器工具類(java電商訂單自動失效或收貨)
java電商訂單超時改狀態工具類 最近在做一個電商專案,要求在使用者下單後未付款30分鐘後就將訂單的狀態改為失效,最初想的是用定時器沒幾秒去資料庫檢視有哪些訂單未付款但超過30分的,就修改狀態,這個方式有兩種缺點,一:如果時間設定的較短,就會導致一直在讀寫資料庫,二:如果時間設定較長就會
自定義sio::message::ptr工具類
class tool_map { public: static bool try_get_value(sio::message::ptr& out_data, const char* key, sio
AsyncTask解析(下)——實現自定義AsyncTask網路傳輸工具類封裝
在上文: AsyncTask解析(上)——原理分析與超簡單demo實現中已經對AsyncTask的實現原理以及原始碼流程進行了一定的分析,相信大家已經基本熟悉了AsyncTask內部實現網路傳輸的呼叫順序以及過程細節,最後還寫出了一個比較簡單的Demo實踐,十分簡單易懂相信
Java中自定義物件使用Collections工具類中的Sort方法
Collections工具類中的sort方法有兩種形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一種方法中List型別的物件必須實現Comparable介面,此外,
Android 自定義View之繪圖工具類Canvas+Paint+Path(onDraw方法)基礎詳解
本章節講述三個繪圖工具類Canvas(畫布),Paint(畫筆),Path(路徑) 1.Canvas(畫布)相關方法詳解 1.1. 方法:Canvas() 作用:建立一個空的畫布,可以使
為Redis配置自定義fastJson序列化工具類
alibaba.fastjson內部已經提供了對Redis儲存物件序列化的工具類GenericFastJsonRedisS
聯合體類有使用者自定義型別的處理辦法
聯合體內部如果有使用者自定義成員,那麼各種型別建構函式,拷貝函式,解構函式,均被定義為刪除的。所以使用者需要肩負起構造,析構的責任。採用如下例所示的方法!!!! #include<iostream> #include<string> using n
自定義redis序列化工具
我們 utils 字節數 pac keys ted ive onu 問題 redis一個優點就是可以將數據寫入到磁盤中。 我們知道寫入磁盤的數據實際上都是以字節(0101這樣的二進制數據)的形式寫入的。 這意味著如果我們要將一個對象寫入磁盤,就必須將這個對象序列化。 jav
自定義 popWindow彈框 工具包
popu second db2 oca pri dial motion void float 前言:因為Android 沒有像IOS一樣的ActionSheet,雖然在github上看到有一些類似ActionSheet的庫,總覺得不好用,不如自己寫一個彈框通用類,樣式全
C#自定義處理xml數據類實例
行數 tostring 圖片 跑步 判斷 rose bool ati map 本文實例講述了C#自定義處理xml數據類。分享給大家供大家參考。具體分析如下: 這個C#類專門用戶處理xml數據,可以大大簡化xml的操作,類中封裝了常用的xml操作,包括打開、讀取xml數據,
Laravel 5.5 FormRequest 自定義表單請求驗證類
根目錄 use his extends 數據 不一致 不能 登錄模塊 能夠 1、把表單驗證邏輯寫在Controller中,這是最基礎的方法,但是不好維護,如: 1 namespace App\Http\Controllers\Admin; 2 3 use Illu
[Doctrine Migrations] 數據庫遷移組件的深入解析三:自定義數據字段類型
con 組件 extends arr TP value ctr ets field 自定義type 根據官方文檔,新建TinyIntType類,集成Type,並重寫getName,getSqlDeclaration,convertToPHPValue,getBindingT
自定義型別 結構體型別建立 結構體初始化
結構體 結構體的基礎知識: 結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。 結構體的宣告: struct tag //struct是結構體關鍵字,tag為結構體標籤 { member-list; //成員列表 }variable-list;//變
Qt中QVariant儲存自定義型別
#include <QDebug> //先宣告類 class Test{ public: QString myName; }; //註冊自定義型別 Q_DECLARE_METATYPE(Test) int main(int argc, char *argv[]) {
自定義型別的建立
建立自定義型別的最常見方式,就是組合使用建構函式模式與原型模式。 1 window.onload = function() { 2 var person1 = new Person("Nicholas", 29, "Software Engineer"); 3 var perso
Android應用--簡 美音樂播放器獲取專輯圖片(自定義列表介面卡)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
postgresql自定義型別並返回陣列
轉自 https://blog.csdn.net/victor_ww/article/details/44415895 create type custom_data_type as ( id int, name varchar(50), score decimal(