Android使用Gson(至關於C#的Newtonsoft.Json)很是好用

C#轉Java有一段時間了,以前作ASP.NET WebAPI微軟竟將第三方類庫Newtonsoft.Json做爲VS新建MVC和WebAPI項目默認必備的Json工具Nuget包,可想而知這個包有多受寵。javascript

如今Newtonsoft.Json的最新版本已經出到v10.0.2了,而Java則是谷歌的開源Json工具包:Gson,目前最新版本是v2.8.0,最新他和Newtonsoft.Json的原理同樣,也是使用反射來實現的。java

若是要在Android Studio使用很是簡單,先在AndroidManifest.xml添加json

compile 'com.google.code.gson:gson:2.8.0'

而後Android Studio就會提示你gradle文件已經更改過了,須要同步,點擊上方黃色提示框右邊的Sync Now而後等一會就能夠盡情的使用了。工具

那如何使用它呢?我這裏有一個複雜一點的Json,先看這段Json;gradle

{
    "data": [
        {
            "Avatar": "/Image/avatar0.jpg",
            "Id": 0,
            "IsDelete": true,
            "Name": "旋風小夥0"
        },
        {
            "Avatar": "/Image/avatar1.jpg",
            "Id": 1,
            "IsDelete": true,
            "Name": "旋風小夥1"
        },
        {
            "Avatar": "/Image/avatar2.jpg",
            "Id": 2,
            "IsDelete": true,
            "Name": "旋風小夥2"
        }
    ],
    "result": {
        "code": 1,
        "msg": "Ok"
    }
}

  分析這段Json,Java的對象模型大概是這樣的:google

對了,若是你想在Android Studio快速生成Setter和Getter方法,只須要在當前類使用Alt+Insert快捷鍵選擇你想快速生成的代碼類型便可spa

用戶信息的模型:UserInfocode

public class UserInfo {
    private int Id;
    private String Name;
    private String Avatar;
    private boolean IsDelete;

...Setter和Getter方法 }

 

返回狀態代碼的模型:BaseResultxml

public class BaseResult {
    private int code;
    private String msg;
...Setter和Getter方法
}

Result-Data模型對象

public class DataResult {
    private BaseResult result;
    private List<UserInfo> data;
...Setter和Getter方法
}

生成模型後咱們就要開始實例化對象,打開MainActicity.java在onCreate方法添加以下代碼:

        DataResult model = new DataResult();

        List<UserInfo> users = new ArrayList<>();
        //使用for循環添加UserInfo
        for (int i = 0;i < 3;i++){
            UserInfo user = new UserInfo();
            user.setAvatar("/Image/avatar" + i + ".jpg");
            user.setId(i);
            user.setName("旋風小夥" + i);
            user.setDelete(true);
            users.add(user);
        }

        BaseResult result = new BaseResult();
        result.setCode(1);
        result.setMsg("Ok");

        model.setData(users);
        model.setResult(result);

最後,要用到咱們強大的Gson類了,在這裏Newtonsoft.Json和Gson的使用有點不一樣,Newtonsoft.Json序列化和反序列化的方法是靜態的,而Gson則不是,這裏咱們封裝一個JsonUitl爲了之後方便靜態調用使用:

 

咱們新建一個JsonUtil類:

1,定義一個靜態私有變量mGson,並將它實例化;

2,定義一個靜態方法ToObject,將json反序列轉化成指定對象,這個方法只有一行代碼,其實就是調用了Gson的fromJson方法,將一段json和要轉換的目標傳進去,他就會以什麼類型返回;

2,定義一個靜態方法ToJson,將對象序列化轉化成Json,這個方法也是調用了Gson的ToJson方法將對象轉換成一段Json返回String類型;

import com.google.gson.Gson;


/**
 * Created by Administrator on 2017/4/17.
 */

public class JsonUtil {

    private static Gson mGson = new Gson();

    public static Object toObject(String json , Class classOfT){
        return  mGson.fromJson(json , classOfT) ;
    }

    public static <T> String toJson(T object) {
        return mGson.toJson(object);
    }
}

這樣就行了,咱們只須要一行代碼就能夠把上面的model對象轉換成Json對象了。

String jsonData = JsonUtil.toJson(model);
Log.d("Test", jsonData);

 運行模擬器,查看Android Monitor序列化結果,反序列也是如此。

相關文章
相關標籤/搜索