Gson使用

1、json字符串转list

ArrayList<NodeBean> nodeList = (ArrayList<NodeBean>) new Gson().fromJson(
                    selectNextNodeRspMsg.getRSP_BODY().getResultObject().toString(),
                    new TypeToken<ArrayList<NodeBean>>() {
                    }.getType());

返回值是new TypeToken<ArrayList<NodeBean>>() {}.getType()); 的类型

1、泛型使用

没有引入泛型之前时写法:

public class UserResult {
    public int code;
    public String message;
    public User data;
}
//=========
public class UserListResult {
    public int code;
    public String message;
    public List<User> data;
}
//=========
String json = "{..........}";
Gson gson = new Gson();
UserResult userResult = gson.fromJson(json,UserResult.class);
User user = userResult.data;

UserListResult userListResult = gson.fromJson(json,UserListResult.class);
List<User> users = userListResult.data;

上面有两个类UserResultUserListResult,有两个字段重复,一两个接口就算了,如果有上百个怎么办?不得累死?所以引入泛型。

//不再重复定义Result类
Type userType = new TypeToken<Result<User>>(){}.getType();
Result<User> userResult = gson.fromJson(json,userType);
User user = userResult.data;

Type userListType = new TypeToken<Result<List<User>>>(){}.getType();
Result<List<User>> userListResult = gson.fromJson(json,userListType);
List<User> users = userListResult.data;

看出区别了么?引入了泛型之后虽然要多写一句话用于获取泛型信息,但是返回值类型很直观,也少定义了很多无关类。

参考:

你真的会用Gson吗?Gson使用指南(一)   https://www.jianshu.com/p/e740196225a4
你真的会用Gson吗?Gson使用指南(二)  https://www.jianshu.com/p/c88260adaf5e
你真的会用Gson吗?Gson使用指南(三)
你真的会用Gson吗?Gson使用指南(四)

 
原文地址:https://www.cnblogs.com/xyfaneast/p/10972439.html