目前在项目中遇到对Json的处理,这里将自己的学习总结一下。首先要了解一个东西,要从它的定义与由来来了解。
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。
1.Json的结构
Json一共有两种结构,对象与数组。
对象是一个无序的''名称/值''集合。是以'{'开始以'}'结束,中间有0个或多个','进行分割。
例子:表示人的一个对象:{"姓名" : "张三","年龄" : 24}
例子:表示一群人:
[{"姓名" : "张三" , "年龄" : 23},{"姓名" : "李四" , "年龄" : 24}]
2.Json的使用
这里对Json的使用以引用using Newtonsoft.Json为主,主要讲述这个类的使用。
类的方法主要介绍JsonReader/JsonWriter/JsonConvert
JsonReader
string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value+"\r\n");
}
Console.ReadKey();
JsonWriter
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("input");
writer.WriteValue("value");
writer.WritePropertyName("output");
writer.WriteValue("result");
writer.WriteEndObject();
writer.Flush();
string jsonText2 = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonText2);
Console.ReadKey();
3.Json的序列化与反序列化
序列化主要采用JsonConvert.SerializeObject,例如:
List<Student> lstStuModel = new List<Student>()
{
new Student(){ID=1,Name="张飞",Age=250,Sex="男"},
new Student(){ID=2,Name="潘金莲",Age=300,Sex="女"}
};
//Json.NET序列化
string jsonData = JsonConvert.SerializeObject(lstStuModel);
Console.WriteLine(jsonData);
Console.ReadKey();
反序列化主要采用
JsonConvert.DeserializeObject方法实现,例如:
//Json.NET反序列化
string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";
Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化
Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));
Console.ReadKey();
JsonConvert反序列化的内容,的接收可以为数组JArray,JObject,JNode(XML),对象等
JObject
嵌套格式的应用
string jsonText3 = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}"; JObject jo1 = (JObject)JsonConvert.DeserializeObject(jsonText3); string zone = jo1["beijing"]["zone"].ToString(); string zone_en = jo1["beijing"]["zone_en"].ToString();
JArray
数组性数据的应用
string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1); string ja1a = ja[1]["a"].ToString(); //或者 JObject o = (JObject)ja[1]; string oa = o["a"].ToString();