CSDN广告是越来越多了,所有博客笔记不再更新,新网址 DotNet笔记
和之前写的xml操作一样,C#json的操作,也是通过类库进行的。JSON.NET
using Newtonsoft.Json.Linq;
引入前辈的原网址:http://www.cnblogs.com/Sky-cloudless/archive/2012/04/24/2467936.html
1:根据简单的json字符串创建一个JObject对象。
/*string json={“name”:“Tom”,“age”:“15”}*/, //模板
/*方式1*/
JObject jo=new JObject();
jo.Add(new JProperty("name", "Tom"));
jo.Add(new JProperty("age", "15"));
/*方式2*/
JObject jo2=new JObject(new JProperty("name", "Tom"),new JProperty("age", "15"));
以上两种方式根据简单的json字符串创建了json对象.
2:根据模板对JArray数组的创建
/*string str_ja=["15225183408","18749495008"]*/
JArray ja=new JArray();
ja.Add(new JValue("15252183408"));
ja.Add(new JValue("18749495008"));
3:需求:建一个关于学生的JObject对象,这个学生有姓名,年龄,电话(2个)
/*
{"name":"Tom","age":"15","phone":["15228183408","18749495008"]}
*/
JObject jo=new JObject(new JProperty("name", "Tom"),new JProperty("age", "15"));
JArray ja=new JArray();
ja.Add(new JValue("15252183408"));
ja.Add(new JValue("18749495008"));
jo.Add(new JProperty("phone",ja.ToString()));
4:按模板构建json对象
{
"TeamName":".NET-a组",
"Dept":"计科2班",
"Mannager":"张二蛋",
"Member":[
{"NAME":"tOM","AGE":"15","PHONE":["15225183408","18749495008"]},
{"NAME":"tAKIM","AGE":"16","PHONE":["15225183128","18749495003"]}
]
}
5:根据模板,读取json对象的对应字段
{
"message":
{
"PRODNAME": "精谛果蔬原汁机",//名称
"PRESENTSCODE": "ZP330006",
"POINT": null,
"SPRICE": null,
"PRESENTID": "ZP330006",
"PRICEFORNORMAL": "2680",
"GETPOINT": 1398, //可获积分
"PRODTYPE": "0",
"USEPOINT": 0,
"BENEFIT": 100,
"SCODE": "JDGSYZJ",
"TRANMODE": null,
"PRESENTNUM": 1,
"PRESENTNAME": "金彪马陶瓷刀",//赠品名称
"UNITPRICE": 1398, //销售价
"SPEC": //规格信息
[
{
"SPEC3": null, //款式/尺码
"SPEC2": "JD--12", //编码
"STORENUM": 64, //库存
"SPEC1": "白色" //颜色
}
],
"PRODID": "330006", //货号
"INPRICE": 908 //进价
}
}
以上信息是一个"商品明细接口"返回的一个货号为330066商品的基本信息,我们需要读取库存字段,名称字段,价格字段.\
我们可以把上面的内容转化为一个JObject对象,然后就可以读取了;如下代码:
{
WebRequest wr = WebRequest.Create("http://xxxxxxxxxxxxxxxx:1218/product/proid?proid=330066");//URI
WebResponse wres = wr.GetResponse();
Stream stream = wres.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string strJson = sr.ReadToEnd(); //获取json字符转,就是模板的那个形式
JObject jo = JObject.Parse(strJson);//吧json字符串转化为json对象
string message=jo["message"].ToString();//获取message属性(字段)的值
JObject jo_msg = JObject.Parse(message);//把message转化为JObject对象
//store_count 库存 price 价格 pro_name 名称
string store_count = "0";
string price = jo_msg["UNITPRICE"].ToString();//获取价格
string pro_name = jo_msg["PRODNAME"].ToString();//获取了商品名称
//库存在规格信息中,规格信息是一个JArry数组,每一个元素仍是一个JObject对象
//我们只需要遍历这个数据就行
JArray ja = JArray.Parse(jo_msg["SPEC"].ToString());//把规格转化为数组对象
int ja_length = ja.Count();//获取数组的长度
for (int i = 0; i < ja_length;i++ )
{
JObject jo_temp =JObject.Parse(ja[i].ToString());//把每一个元素转化为JObject对象
store_count = jo_temp["STORENUM"].ToString(); //获取了库存
}
}
原理就是"层层剥取",其实这些就算是linq to json的部分功能了,在后面我会说使用Linq对json的查询.