Gson 自动过滤null 解决方案。
16lz
2021-01-26
对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。
从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧。
private String aviType = "0"; private String trace = "0"; private String isFirstTransfer = "1"; private String mty = "0140"; private String respcode = null; private OpRecord opRecord; private class OpRecord { private String createTime = getData(); private String createUserCode = "00000075"; private String id = null; private String waybillNo; private int opCode = 182; public OpRecord() { } public void setWaybillNo(String waybillNo) { this.waybillNo = waybillNo; } }
将类作为JSON输入。
public String getParams(String waybillNo) { Gson gson = new Gson(); return gson.toJson(this); }
输出打印结果:
{"aviType":"0","trace":"0","isFirstTransfer":"1","mty":"0140","opRecord":{ "createTime":"2018-07-30 14:01:02.632", "createUserCode":"00000075", "opCode":182 }}
装换成Json 是没有任何问题,但不是我想要的結果,缺少属性:
//属性1 private String respcode = null; //属性2 private String id = null;
想要的JSON结果:
{"aviType":"0","trace":"0","isFirstTransfer":"1","mty":"0140","respcode":null,"opRecord":{ "createTime":"2018-07-30 14:04:43.961", "id":null, "waybillNo":"899931211861", "opCode":182}
为什么Gson会自动过滤null呢,查看源码边知道,new Gson() 自动序列化,导致过滤null。
this.serializationContext = new JsonSerializationContext() { public JsonElement serialize(Object src) { return Gson.this.toJsonTree(src); } public JsonElement serialize(Object src, Type typeOfSrc) { return Gson.this.toJsonTree(src, typeOfSrc); } };
解决方法:
找到问题所在,那我不序列化就不ok吗?可是却没有 new Gson(false),new Gson(null)等,类似这样的构造器。
不过却又另一种方法获取到Gson对象。
public Gson create() { List factories = new ArrayList(); factories.addAll(this.factories); Collections.reverse(factories); factories.addAll(this.hierarchyFactories); this.addTypeAdaptersForDate(this.datePattern, this.dateStyle, this.timeStyle, factories); return new Gson(this.excluder, this.fieldNamingPolicy, this.instanceCreators, this.serializeNulls, this.complexMapKeySerialization, this.generateNonExecutableJson, this.escapeHtmlChars, this.prettyPrinting, this.serializeSpecialFloatingPointValues, this.longSerializationPolicy, factories); }
this.serializeNulls,这个属性便是序列化了。让其为null这个属性便可以了。
GsonBuilder gsonbuilder = new GsonBuilder(); gsonbuilder.serializeNulls(); Gson gson = gsonbuilder.create();
这样就获取到了,未经过序列化的Gson。
更多相关文章
- Android(安卓)关于手机基本信息的获得
- android 获取应用程序包名,图标,入口Activity类
- Android窗口类型
- Android(安卓)-- 程序判断手机ROOT状态,获取ROOT权限
- android6.0获取通讯录权限
- android之TypedArray
- MAC和Windows Android(安卓)Studio获取SHA1值
- 使用Android(安卓)Camera2 API获取YUV数据
- Android实用技巧之adb命令:ADB命令大全