高效正确的使用Gson

来源:互联网 发布:英语口语学习软件推荐 编辑:程序博客网 时间:2024/06/13 00:53

gson的基本用法:

反序列化:将json转换为类Gson gson = new Gson();Data i = gson.fromJson("100", Data.class); <pre class="html" name="code"> List<对象类>list=gson.fromJson(json,new TypeToken<List<Food>>() {}.getType());   <span style="color:#33cc00;">//将json转换为集合</span>
<pre class="hljs java"><code class="java">String[] strings = gson.fromJson(jsonArray, String[].class);</code>            <span style="color:#33cc00;">//将json转换为数组</span>
序列化:将类转换为jsonGson gson = new Gson();String jsonNumber = gson.toJson(100);       // 100

 

@SerializedNamer注解:将JSON字段的值解析到emailAddress中

//设置单个字段名@SerializedName("email_address")public String emailAddress;<span style="color:#33cc00;">  //当alternate数组中出现任意一个时,都可以得到正确结构</span>@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})public String emailAddress;

 

泛型:

直接看例子

public class UserResponse {    public int code;    public String message;    public User data;}public class UserResponse {    public int code;    public String message;    public Client data;}<pre class="html" name="code">public class Result<T> {    public int code;    public String message;    public T data;}
//请求数据
<pre class="hljs php"><code class="php">Type userListType = <span class="hljs-keyword">new</span> TypeToken<Result<<span class="hljs-keyword">List</span><User>>>(){}.getType();Result<<span class="hljs-keyword">List</span><User>> userListResult = gson.fromJson(json,userListType);<span class="hljs-keyword">List</span><User> users = userListResult.data;</code>


TypeAdapter:接管序列化和反序列化过程

自定义gson解析的过程,并且会大大提高性能  

 Gson gson=new GsonBuilder().registerTypeAdapter(Tb.class, new TypeAdapter<Tb>() {        @Override        public void write(JsonWriter jsonWriter, Tb tb) throws IOException {  <span style="color:#33cc00;">//将对象转为字符串</span>            jsonWriter.beginObject();            jsonWriter.name("name").value(tb.name);            jsonWriter.name("age").value(tb.age);            jsonWriter.endObject();        }        @Override        public Tb read(JsonReader jsonReader) throws IOException {               <span style="color:#33cc00;"> //将字符串转为类</span>            Tb user = new Tb();            jsonReader.beginObject();            while (jsonReader.hasNext()) {                switch (jsonReader.nextName()) {                    case "name":                        user.name = jsonReader.nextString();                        break;                    case "age":                        user.age = jsonReader.nextInt();                        break;                }            }            jsonReader.endObject();            return user;        }    }).create();        Log.e("dddd",gson.toJson(new Tb("哈哈",20)));

注册了 TypeAdapter之后,@SerializedNameFieldNamingStrategySinceUntilExpos失去了效果,只会调用我们实现的UserTypeAdapter.write(JsonWriter, User) 方法

 

 

 

 

 

 

 

 

 

 

 

 


 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海尔空调保修卡丢了怎么办 科龙空调不制冷怎么办 魅族s6屏幕碎了怎么办 格力空调化霜怎么办 一开空调就跳闸怎么办 洗衣机顶盖的安全开关损坏怎么办 苹果平板电脑拍照坏了怎么办 苹果hom键不灵了怎么办 平板电脑home键发烫怎么办 华为平板无法输入资料怎么办 安卓平板没声音怎么办? 平果手机充不了电怎么办 苹果6s用电太快怎么办 平板充不起电了怎么办 日本买的电器国内售后怎么办 海淘地址试投不成功怎么办 怀孕了吐得厉害怎么办 玩网页游戏好卡怎么办 网页游戏占cpu高怎么办 微信有余额绑定其他名下怎么办 银行卡绑定支付余额不对怎么办 可乐机不制冷了怎么办 被淘宝卖家威胁怎么办 征信不好想贷款怎么办 急用钱征信不好怎么办 急用钱逾期不还怎么办 急用钱借款不还怎么办 做b超按压疼痛怎么办 做b超没有尿怎么办 b超憋不到尿怎么办 做b超前没有尿意怎么办 肝胆b超前喝水了怎么办 肝胆彩超喝水了怎么办 胆囊b超喝了水怎么办 系统b超照不到怎么办 思维彩超宝宝不动怎么办 怀孕七个月胎儿缺氧怎么办 怀孕29周小孩偏小怎么办 孕29周胎儿臀位怎么办 刚怀孕有囊肿该怎么办 食杏中毒怎么办吃什么