美文网首页安卓
android 模型与json数据的相互转化

android 模型与json数据的相互转化

作者: 风___________ | 来源:发表于2018-01-25 14:39 被阅读466次

    如果喜欢copy直接看最下面的封装

    第一式: 模型 '转' json字符串
    第二式: json字符串  '转' 模型
    第三式: List<模型> '转' json字符串
    第四式: json字符串 '转'  List<模型>
    

    一:工具

        /**
         * model json转换的库
         * */
        compile 'com.google.code.gson:gson:2.8.0'
    

    基础使用

    1. 对象的解析与转化json
    Gson gson = new Gson();
    // 对象 -->json
    String jsonString = gson.toJson(user); 
    // json -->对象
    User user = gson.fromJson(jsonString, User.class);
    
    1. 属性重命名(当后台返回的json 名称与前台属性名不一致时)
        @SerializedName("key")
        private String keyString;
    
        @SerializedName("amount")
        private String amount;
    
    1. 当有模型或者模型数组嵌套的时候
    // 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
    }
    
    1. 数组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
    

    二:自己封装一个工具类

    1. 工具类使用:
    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);         
    
    1. 工具类代码如下
    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;
        }
    }
    

    参考学习自-----你真的会用Gson吗?Gson使用指南~~~~写的贼好

    相关文章

      网友评论

        本文标题:android 模型与json数据的相互转化

        本文链接:https://www.haomeiwen.com/subject/rmevaxtx.html