使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。
1.Json字符串普通格式解析(常用)
string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["zone"].ToString();
string zone_en = jo["zone_en"].ToString();
2.Json字符串嵌套格式解析
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();
3.Json字符串数组格式解析
string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[]
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; //上面写法和此写法效果一样
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串
string str = jArray[0]["a"].ToString();
4.json嵌套循环
List<group_m> list = new List<group_m>();
string orderno = Web.DLL.Utility.RequestUtility.GetString("orderno");
dr = Web.DLL.wxItem.drive_result.Getdrive_result(GlobalData.GetDBHelper(), " and orderno ='" + orderno + "'");
string resultstr = dr.resultstr;
if (!string.IsNullOrEmpty(resultstr))
{
//JObject jo = (JObject)JsonConvert.DeserializeObject(resultstr);
//group_m errmode = JsonConvert.DeserializeObject<group_m>(resultstr);
JArray ja = (JArray)JsonConvert.DeserializeObject(resultstr); //反序列化为数组
for (int i = 0; i < ja.Count; i++)
{
group_m gm = new group_m();
int groupid = Convert.ToInt32(ja[i]["groupid"].ToString());
string groupname = ja[i]["groupname"].ToString();
gm.groupid = groupid;
gm.groupname = groupname;
List<title_m> tmlist = new List<title_m>();
if (ja[i]["titlelist"] != null)
{
JArray ja1 = (JArray)JsonConvert.DeserializeObject(ja[i]["titlelist"].ToString());
for (int j = 0; j < ja1.Count; j++)
{
title_m tm = new title_m();
int sort = Convert.ToInt32(ja1[j]["sort"].ToString());
int titleid = Convert.ToInt32(ja1[j]["titleid"].ToString());
string title = ja1[j]["title"].ToString();
int result = Convert.ToInt32(ja1[j]["result"].ToString());
tm.sort = sort;
tm.titleid = titleid;
tm.title = title;
tm.result = result;
tmlist.Add(tm);
}
gm.titlelist = tmlist;
}
list.Add(gm);
}
}
else
{
Response.Write("无数据");
Response.End();
}
类:
public class group_m
{
public int groupid { get; set; }
public string groupname { get; set; }
public List<title_m> titlelist { get; set; }
}
public class title_m
{
public int sort { get; set; }
public int titleid { get; set; }
public string title { get; set; }
public int result { get; set; }
}
下面是resultstr
[{
"groupid": 1,
"groupname": "驾驶准备",
"titlelist": [{
"sort": 1,
"titleid": 1,
"title": "驾驶前对天气、环境、路线提前进行了解和规划。",
"result": 4
}, {
"sort": 2,
"titleid": 2,
"title": "上车前对车辆进行检查(轮胎、障碍物、外观和主要设备)。",
"result": 4
}, {
"sort": 3,
"titleid": 3,
"title": "上车后调整座椅、后视镜、系好安全带,确认所有乘员安全就位。",
"result": 4
}]
}, {
"groupid": 2,
"groupname": "驾驶态度",
"titlelist": [{
"sort": 4,
"titleid": 4,
"title": "遵守道路交通安全法和相关规定,严禁使用手机。",
"result": 4
}, {
"sort": 5,
"titleid": 5,
"title": "驾驶态度以及对他人的态度:激进攻击型、谨慎、容忍、粗暴。",
"result": 4
}]
}, {
"groupid": 3,
"groupname": "放眼远方",
"titlelist": []
}, {
"groupid": 4,
"groupname": "洞悉四周",
"titlelist": []
}, {
"groupid": 5,
"groupname": "视线灵活",
"titlelist": []
}, {
"groupid": 6,
"groupname": "留有余地",
"titlelist": []
}, {
"groupid": 7,
"groupname": "引人注意",
"titlelist": []
}, {
"groupid": 8,
"groupname": "车辆操控",
"titlelist": []
}]
注意:如果使用的是VS2010,当前的工程改成.Net Framework 4。