在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#转Java有一段时间了,之前做ASP.NET WebAPI微软竟将第三方类库Newtonsoft.Json作为VS新建MVC和WebAPI项目默认必备的Json工具Nuget包,可想而知这个包有多受宠。 现在Newtonsoft.Json的最新版本已经出到v10.0.2了,而Java则是谷歌的开源Json工具包:Gson,目前最新版本是v2.8.0,最新他和Newtonsoft.Json的原理一样,也是使用反射来实现的。 如果要在Android Studio使用非常简单,先在AndroidManifest.xml添加 compile 'com.google.code.gson:gson:2.8.0' 然后Android Studio就会提示你gradle文件已经更改过了,需要同步,点击上方黄色提示框右边的Sync Now然后等一会就可以尽情的使用了。 那如何使用它呢?我这里有一个复杂一点的Json,先看这段Json; { "data": [ { "Avatar": "/Image/avatar0.jpg", "Id": 0, "IsDelete": true, "Name": "旋风小伙0" }, { "Avatar": "/Image/avatar1.jpg", "Id": 1, "IsDelete": true, "Name": "旋风小伙1" }, { "Avatar": "/Image/avatar2.jpg", "Id": 2, "IsDelete": true, "Name": "旋风小伙2" } ], "result": { "code": 1, "msg": "Ok" } } 分析这段Json,Java的对象模型大概是这样的: 对了,如果你想在Android Studio快速生成Setter和Getter方法,只需要在当前类使用Alt+Insert快捷键选择你想快速生成的代码类型即可 用户信息的模型:UserInfo public class UserInfo { private int Id; private String Name; private String Avatar; private boolean IsDelete;
返回状态代码的模型:BaseResult public class BaseResult { private int code; private String msg; ...Setter和Getter方法 Result-Data模型 public class DataResult { private BaseResult result; private List<UserInfo> data; ...Setter和Getter方法 生成模型后我们就要开始实例化对象,打开MainActicity.java在onCreate方法添加如下代码: DataResult model = new DataResult(); List<UserInfo> users = new ArrayList<>(); //使用for循环添加UserInfo for (int i = 0;i < 3;i++){ UserInfo user = new UserInfo(); user.setAvatar("/Image/avatar" + i + ".jpg"); user.setId(i); user.setName("旋风小伙" + i); user.setDelete(true); users.add(user); } BaseResult result = new BaseResult(); result.setCode(1); result.setMsg("Ok"); model.setData(users); model.setResult(result); 最后,要用到我们强大的Gson类了,在这里Newtonsoft.Json和Gson的使用有点不同,Newtonsoft.Json序列化和反序列化的方法是静态的,而Gson则不是,这里我们封装一个JsonUitl为了以后方便静态调用使用:
我们新建一个JsonUtil类: 1,定义一个静态私有变量mGson,并将它实例化; 2,定义一个静态方法ToObject,将json反序列转化成指定对象,这个方法只有一行代码,其实就是调用了Gson的fromJson方法,将一段json和要转换的目标传进去,他就会以什么类型返回; 2,定义一个静态方法ToJson,将对象序列化转化成Json,这个方法也是调用了Gson的ToJson方法将对象转换成一段Json返回String类型; import com.google.gson.Gson; /** * Created by Administrator on 2017/4/17. */ public class JsonUtil { private static Gson mGson = new Gson(); public static Object toObject(String json , Class classOfT){ return mGson.fromJson(json , classOfT) ; } public static <T> String toJson(T object) { return mGson.toJson(object); } } 这样就好了,我们只需要一行代码就可以把上面的model对象转换成Json对象了。 String jsonData = JsonUtil.toJson(model); Log.d("Test", jsonData); 运行模拟器,查看Android Monitor序列化结果,反序列也是如此。 |
请发表评论