C#中json的操作

和之前写的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的查询.






你可能感兴趣的:(C#中json的操作)