android 模型与json数据的相互转化
2018-01-25 本文已影响466人
风___________
如果喜欢copy直接看最下面的封装
第一式: 模型 '转' json字符串
第二式: json字符串 '转' 模型
第三式: List<模型> '转' json字符串
第四式: json字符串 '转' List<模型>
一:工具
/**
* model json转换的库
* */
compile 'com.google.code.gson:gson:2.8.0'
基础使用
- 对象的解析与转化json
Gson gson = new Gson();
// 对象 -->json
String jsonString = gson.toJson(user);
// json -->对象
User user = gson.fromJson(jsonString, User.class);
- 属性重命名(当后台返回的json 名称与前台属性名不一致时)
@SerializedName("key")
private String keyString;
@SerializedName("amount")
private String amount;
- 当有模型或者模型数组嵌套的时候
// model 模型如下:
public class KapModelContentBill extends KapModelBase {
@SerializedName("id")
private int ID;
@SerializedName("buyer")
private KapModelUser buyer;// 嵌套model
@SerializedName("count")
private int count;
@SerializedName("totalAmount")
private int totalAmont;
@SerializedName("time")
private long time;
@SerializedName("bills")
private List<KapModelBill> bills; // 嵌套modelList
}
- 数组json --> List<model>
// 针对上述模型 json -> model 有如下操作:
Gson gson = new Gson();
// 错误的操作
List<UserModel> userList = gson.fromJson(jsonArray, List<UserModel>.class)
// 正确的操作
List<UserModel> userList = gson.fromJson(jsonArray, new TypeToken<List<UserModel>>() {}.getType());
// 原因:范型擦除
对于Java来说List<String> 和List<User> 这俩个的字节码文件只一个那就是List.class
二:自己封装一个工具类
- 工具类使用:
UserModel *userModel = new UserModel();
// model ----> json
String jsonString = KapGsonManager.KapModelToJson(userModel);
// json ------> model
UserModel *userModel = KapGsonManager.KapJsonToModel(jsonString,UserModel.class);
// models ------> json
List<UserModel> userList = new List<UserModel>(){{
add(userModel);
}};
String jsonArrayString = KapGsonManager.KapModelsToJson(userList);
// json ------->models
List<UserModel> modelList = KapGsonManager.KapJsonToModels(modelString,UserModel.class);
- 工具类代码如下
import com.google.gson.Gson;
import java.lang.reflect.Type;
import java.util.List;
import ikidou.reflect.TypeBuilder;
/**
* Created by jing on 17/5/22.
* gson的管理类
*/
public class KapGsonManager {
private KapGsonManager(){}
private static KapGsonManager shareGsonManager = new KapGsonManager();
private Gson gson = new Gson();
// model
public static String KapModelToJson(Object o){
if (o == null) return "";
return shareGsonManager.gson.toJson(o);
}
public static <T> T KapJsonToModel(String jsonString,Class<T> modelClass){
if (jsonString == null) return null;
return shareGsonManager.gson.fromJson(jsonString,modelClass);
}
// modelList
public static String KapModelsToJson(List modelList){
if (modelList == null) return "";
return shareGsonManager.gson.toJson(modelList);
}
// http://www.jianshu.com/p/d62c2be60617 泛型分析链接
public static <T> List<T> KapJsonToModels(String jsonString, Class<T> modelClass){
Type listType = TypeBuilder
.newInstance(List.class)
.addTypeParam(modelClass)
.build();
List<T> modelList = shareGsonManager.gson.fromJson(jsonString,listType);
return modelList;
}
}