我们都知道在互联网发展的初期时代,那时候采用的还是C/S架构的程序。
那么软件和软件传递的数据格式也从普通的文本转换到了XML这种格式化的存储格式文本。
那么在互联网移动互联网时代,这种C/S传递XML这种格式文件显然是不行的。
那么今天就来搞搞JSON。
我们来看看百度百科的解释:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
百度百科链接:http://baike.baidu.com/link?url=iu5RKjFjmnM5DtVOSTzMl8MsTxdhPCCkKWOyMnsI4zP9DPSC_Bxf-J8ZvgTymL0lfaao21iY9z_40TalfJHhLK
那么显然这种语言格式非常适合传递和解析,并且支持多种语言。
一个简单的JSON数据格式: 他包含了 一个KEY 和值 。写法是: {“KEY”:”VALUE”}
那么JSON 如果不支持负责的数据格式,那样显然是无法替代XML来作为传递的。
数组: [value,value]
复杂的集合:list ,map 等
更加复杂的结合体:
再复杂一点:
显然,看到这里 ,JSON的传递显然会符合你的要求:
我们再来看下标准的写法:一个标准的Map> 写法。 非常清晰
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
{
"programmers": [{
"firstName": "Brett",
"lastName": "McLaughlin",
"email": "aaaa"
}, {
"firstName": "Jason",
"lastName": "Hunter",
"email": "bbbb"
}, {
"firstName": "Elliotte",
"lastName": "Harold",
"email": "cccc"
}],
"authors": [{
"firstName": "Isaac",
"lastName": "Asimov",
"genre": "sciencefiction"
}, {
"firstName": "Tad",
"lastName": "Williams",
"genre": "fantasy"
}, {
"firstName": "Frank",
"lastName": "Peretti",
"genre": "christianfiction"
}],
"musicians": [{
"firstName": "Eric",
"lastName": "Clapton",
"instrument": "guitar"
}, {
"firstName": "Sergei",
"lastName": "Rachmaninoff",
"instrument": "piano"
}]
}
在C#中操作JSON 数据的类库有很多,这里我们用到Newtonsoft.Json.dll 这个动态库。
那么引入进去之后我们就要开始干活了,在Java 中常常喜欢讲操作以Utils 定义,而C#喜欢用Helper 来定义。那还是遵循C#的归还,我们来定义一个
JsonHelper.cs
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.IO;
namespace Helper
{
public class JsonHelper
{
///
/// 将对象序列化为JSON格式
///
/// 对象
/// json字符串
public static string SerializeObject(object o)
{
string json = JsonConvert.SerializeObject(o);
return json;
}
///
/// 解析JSON字符串生成对象实体
///
/// 对象类型
/// json字符串(eg.{"ID":"112","Name":"石子儿"})
/// 对象实体
public static T DeserializeJsonToObject(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
///
/// 解析JSON数组生成对象实体集合
///
/// 对象类型
/// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])
/// 对象实体集合
public static List DeserializeJsonToList(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List));
List list = o as List;
return list;
}
///
/// 反序列化JSON到给定的匿名对象.
///
/// 匿名对象类型
/// json字符串
/// 匿名对象
/// 匿名对象
public static T DeserializeAnonymousType(string json, T anonymousTypeObject)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
}
}
}
文中大多数是用实体转换过来的。那么我们在操作JSON 的时候最归还的做法是定义一个类,然后将该类实例化,最后进行转换。
如一个学生类:
namespace bean
{
public class bean
{
///
/// 该操作ID 方便操作
///
private String id;
public String Id
{
get { return id; }
set { id = value; }
}
///
/// name
///
private String name;
public String Name
{
get { return name; }
set { name= value; }
}
/// /// age /// private int age; public int age { get { return age; } set { age= value; } }
}
然后我们将类实例化:
这步搞定之后,我们就需要生成JSON 数据了:
OK,那么这样就生成成功了,我们来看看
显然这样是非常直观的,那么我们再将反转成对象。
非常简单对不对。ok 这里我们就完成了JSON 的简单操作。更加复杂的LIST 和Map 这些可以参照API 自行解决。