JSON类库下载地址http://www.newtonsoft.com/json下载类库导入引用。
引用的命名空间:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
本人百度文库:C#操作Word文档超详细,TreeView无限开辟节点代码(FTP服务器中的文件和文件名为例)
Ø 深入研究之前先熟悉一下几个常用的类区
类名 |
说明 |
|||||||||
JObject |
用于操作Json对象
|
|||||||||
JArray |
用操作json数组 |
|||||||||
表示JSON(字符串,整数,日期等)中的值。 |
||||||||||
表示JSON属性。 |
Ø Json的字符串搭建格式:
JSON数据在名称/值表达中:
1、名称使用字符串,双引号表示
2、值可以是数字,
3、字符串是双引号,
4、数组是方括号,
5、对象是花括号。
Ø Json代码实战之(读取JsonReader 和 解析JObect)Json
Ø 使用JsonReader读取字符串
/// <summary>
/// JsonReader顺序解析
/// </summary>
private void jsonOne()
{
string jsonText = @"{""Name"":""小三"",""Age"":""22""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType);//名称类型
Console.WriteLine(reader.ValueType);//输出类型
Console.WriteLine(reader.Value);//输出值
Console.WriteLine();
}
}
Ø JObject操作
关于JObect:
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm
/// <summary>
/// JObject用于操作Json对象解析
/// </summary>
private void jsonTwo()
{
//第一种
string jsonText = @"{""Name"":""小红"",""Age"":""22""}";
JObject jo = JObject.Parse(jsonText);//加载json数据
string[] values = jo.Properties().Select(e => e.Name.ToString() +":"+ e.Value.ToString()).ToArray<string>();//获取数据
foreach(string s in values)
{
Console.WriteLine(s);
}
//第二种
JsonReader jr = new JsonTextReader(new StringReader(@"{""你好"":""hihihihi""}"));
JObject jo1 = JObject.Load(jr);//加载jsonReader读取的字符串进行操作
Console.WriteLine(jo1);
//第三种
JArray array = new JArray();
array.Add("hi 大家好");
array.Add(new DateTime().Ticks);
JObject o = new JObject();
o["创投科技"] = array;
Console.WriteLine(o.ToString());
/*输出:
* Name:小红
Age:22
{
"你好": "hihihihi"
}
{
"创投科技": ["hi 大家好",]
}
*/
}
Ø JArray数组操作 和 嵌套json
/// <summary>
/// JArray数组类型
/// </summary>
private void jsonArray()
{
string JsonArrayText = @"[{""Name"":""小黑"",""Age"":""16""},{""Name"":""小白"",""Age"":""17""}]";
//反序列化对象的JSON字符串。
JArray ja = (JArray)JsonConvert.DeserializeObject(JsonArrayText);
string name1 = ja[1]["Name"].ToString();
Console.WriteLine(name1);
//遍历jsons数组
for(int i=0;i<ja.Count;i++)
{
Console.WriteLine(ja[i].ToString());
}
}
/// <summary>
/// Json嵌套性数据
/// </summary>
private void json()
{
try
{
string jsonText = @"
{
""xxx"":
{
x1:
{
shantou:
[{""zone"":""哈尔"",""zone_en"":""街道""}],
xia:
[{""Name"":""小红"",""Age"":""2999""}]
}
}
}";
JObject o = (JObject)JsonConvert.DeserializeObject(jsonText);
//不加方括号json类型正常输出
Console.WriteLine(o);//输出全部
//以下输出只对数组有效
Console.WriteLine(o["xxx"]["x1"]["shantou"][0]);//输出xxx类下的x1类的shantou类中的数据
Console.WriteLine(o["xxx"]["x1"]["shantou"][0]["zone"]);//输出xxx类下的x1类的shantou类中的Name数组
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
}
Ø 序列化Json
v jsonWrite写入stringwriter并且输出
/// <summary>
/// JsonWrite
/// </summary>
private void jsonWriter()
{
StringWriter sw = new StringWriter();
JsonWriter jw = new JsonTextWriter(sw);//json写入StringWriter
jw.WritePropertyName("格式化爱情");
jw.WriteValue("努力奋斗");
Console.WriteLine(sw.ToString());
}
v 反序列
构建json数据结构类,用Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);写入数据结构类
/// <summary>
/// Json数据架构类之操作之反序列化对象
/// Newtonsoft.Json.JsonConvert.DeserializeObject
/// </summary>
private void jsonClass()
{
string jsonText = @"{
""start"":
{ ""str1"":
{
""Name"":""小蔡"",
""Age"":""22222""
},
""str2"":
{
""selfworth"":""自我提升"",
}
}
}";
//反序列化公式
Student json = Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);
json.time = DateTime.Now;//给时间复制
json.start.str1.Age = "26";//给年龄修改值
Console.WriteLine("time == " + json.time);
Console.WriteLine("str1 == " + json.start.str1.Name + "\t" + json.start.str1.Age);
Console.WriteLine("str2 == " + json.start.str2.selfworth);
}
数据结构类:
/// <summary>
/// Json数据架构之入口
/// </summary>
public class Student
{
public DateTime time { get; set; }
public sta start { get; set; }
}
/// <summary>
/// Json分界接口
/// </summary>
public class sta
{
public stastr1 str1 { get; set; }
public stastr2 str2 { get; set; }
}
/// <summary>
/// Json输出用户信息
/// </summary>
public class stastr1
{
public string Name { get; set; }
public string Age { get; set; }
}
/// <summary>
/// Json输出用户价值
/// </summary>
public class stastr2
{
public string selfworth { get; set; }
}
v 序列化
构建json数据结构类,用JsonSerializer类;写入数据结构类
/// <summary>
/// Json数据架构类之操作之序列化
/// JsonSerializer
/// </summary>
private void jsonClass2()
{
//方法一
st s = new st() { Name = "程序员", Age = 20 };//添加数据
//将对象序列化和反序列化为JSON格式。该JsonSerializer使您能够控制对象的编码成JSON
JsonSerializer ser = new JsonSerializer();//JSON序列化
StringWriter sw = new StringWriter();//写入字符初始化
ser.Serialize(new JsonTextWriter(sw), s);//参数含义:第一个参数设置为写入的stringwriter,第二个参数设置为输出的数据结构类
Console.WriteLine(sw.GetStringBuilder().ToString());
Console.WriteLine("\n\n第二种实现方法List泛型");
//方法二
List<st> ls = new List<st>();
st s1 = new st() { Name = "小K1", Age = 20, ls = new List<string> { "123", "456", "789" } };
st s2 = new st() { Name = "小K2", Age = 22, ls = new List<string> { "101112", "131415", "161718" } };
ls.Add(s1);
ls.Add(s2);
StringWriter sw1 = new StringWriter();
JsonSerializer js = new JsonSerializer();
js.Serialize(sw1, ls);
Console.WriteLine(sw1.GetStringBuilder().ToString());
}
数据结构类:
/// <summary>
/// Json数据结构
/// </summary>
public class st
{
public string Name { get; set; }
public int Age { get; set; }
public List<string> ls { get; set; }
}