android开发中,经常需要与后台配合,从接口返回一些数据。一些数组类型的数据,后台数据库一般是字符串存储,某些接口人员不便于做转化时,会传入一些string类型的数据。gson解析时会抛异常:
//json示例
{
array: "[1,2]"
}
//错误日志
Expected a BEGIN_ARRAY but was STRING at line 1 column ...
......
当武力值pk不过接口人员时,只能采用迂回的策略来解决了。方案如下:
List<Integer> reasonList = GsonUtils.fromJson(jsonStr,
new TypeToken<List<Integer>>(){}.getType());
一切都是为了团队,就这样吧
突然想起另一个妥协的案列,待序列化的类定义如下,包含一个int类型。
public class RequestBean{
public int id;
......
}
通过Gson的toJson方法序列化后,将序列化后的字符串作为入参向后台发起请求。此时,int类型的id有初始值0,序列化后为{id:0,...}。因为业务需要,后台接口需区分是否传入id作为筛选条件。此时为了客户端减少改动量,采用了一个讨巧的方案:将int改为Interger。一是利用java自动装箱和拆箱机制避免代码修改;二是Interger对象初始值为null,序列化后为“”。
关于TypeToken的使用,还可参考另一篇文章Gson解析泛型对象时TypeToken的使用方法
网友评论