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; ...Setter和Getter方法
}

返回状态代码的模型: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序列化结果,反序列也是如此。

Android使用Gson(相当于C#的Newtonsoft.Json)非常好用的更多相关文章

  1. 我的Android进阶之旅------>android如何将List请求参数列表转换为json格式

    本文同步发表在简书,链接:http://www.jianshu.com/p/395a4c8b05b9 前言 由于接收原来的老项目并进行维护,之前的http请求是使用Apache Jakarta Com ...

  2. 用NuGet安装NewtonSoft.json

    因为要在C#里读取JSON字符串,资料查来查去,发现只能用第三方的NewtonSoft.json.本来.net也有自带的类库可以处理json,但TM的不停要你将JSON读进类对象里面.我靠,我只不过想 ...

  3. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

  4. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  5. Newtonsoft.Json 自定义 解析协议

    在开发web api的时候 遇到一个要把string未赋值默认为null的情况改成默认为空字符串的需求 这种情况就需要自定义json序列话的 解析协议了 Newtonsoft.Json默认的解析协议是 ...

  6. Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6

    未能加载文件或程序集“Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6”或它的某一个 ...

  7. Newtonsoft.Json 序列化和反序列化 时间格式【转】

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  8. Newtonsoft.Json 版本冲突解决

    在做asp.net MVC 开发时,因为引用的dll 中使用了更高版本的 Newtonsoft.Json ,导致运行时发生错误, 查资料说是因为webApi使用了Newtonsoft.Json 导致了 ...

  9. JsonHelper developed by using Newtonsoft.Json.NET, Deserialize to <T> object , XmlToJson/JsonToXml, QuoteName by using JToken Path.

    namespace TestConsoleApplication { using System; using System.Diagnostics; using System.Threading; u ...

随机推荐

  1. Android 自己定义View须要重写ondraw()等方法

    Android  自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...

  2. 关于Scrum

    最近某些产品经理发出下两周的工作计划的时候,喜欢带上sprint这个字眼,看上去貌似是要走敏捷开发这一套,只可惜,我觉得他表现出来的是对敏捷开发和Scrum一窍不通,甚至对软件开发流程都完全不清楚,居 ...

  3. 矩阵经典题目七:Warcraft III 守望者的烦恼(矩阵加速递推)

    https://www.vijos.org/p/1067 非常easy推出递推式f[n] = f[n-1]+f[n-2]+......+f[n-k]. 构造矩阵的方法:构造一个k*k的矩阵.当中右上角 ...

  4. 使用ADO.NET对SQL Server数据库进行訪问

    在上一篇博客中我们给大家简介了一下VB.NET语言的一些情况,至于理论知识的学习我们能够利用VB的知识体系为基础.再将面向对象程序设计语言的知识进行融合便可进行编程实战. 假设我们须要訪问一个企业关系 ...

  5. Entity Framework底层操作封装V2版本号(3)

    如今是附加的,组合查询须要的扩展类.大家知道lanmda表达式的组合条件比較麻烦,所以就加了一样一个类,方便进行组合查询: using System; using System.Collections ...

  6. Powershell 常见问题

    unapproved verbs WARNING: The names of some imported commands from the module 'todo' include unappro ...

  7. Ubuntu系统下实现Android工程调用独立编译的C++程序和GMP、PBC库

    目的: 实现使用C++编写代码供Android工程调用.C++代码中可以使用STL库,也可以使用常用的由源码编译生成的库,如PBC.因为PBC是基于GMP库的,所以这里只记录了GMP和PBC库的编译安 ...

  8. 并不对劲的DFT

    FFT是一个很多人选择背诵全文的算法. #include<algorithm> #include<cmath> #include<complex> #include ...

  9. BZOJ 4815 数论

    今年的重庆省选? 具体就是,对于每次修改,A[p,q]这个位置,  设d=gcd(p,q) ,则 gcd为d的每一个格子都会被修改,且他们之间有个不变的联系 A[p,q]/p/q==A[k,t]/k/ ...

  10. BZOJ4561: [JLoi2016]圆的异或并 计算几何+treap

    因为本题保证两圆之间只有相包含或相离(不用担心两圆重合 因为我没有RE) 所以每个圆之间的相对位置是确定的  也就是可以按极角排序的, 所以可以按横坐标排序后 扫描同时用treap维护加圆删圆(即遇到 ...