首页 > 代码库 > C# Json简单处理

C# Json简单处理

最近练习写的项目有涉及到json部分,其实明明可以url直接传参,我偏偏用url去传json过去。这里遇到如何js生成json字符串和后台接收时候如何转换成json对象。

这里先把一个检查json格式的工具提供大家,我是用这个去检查自己构造的json是否correct。

地址:<a href:http://www.bejson.com/>http://www.bejson.com/</a>个人觉得蛮好用的,简单方便。

接下来说说我们写javascript时候如何去处理json呢。以我为例,我只需要拼接一个json字符串到url中就够了,贴上代码:

 1  //添加分组 2     $("#btnAddGroup").click( 3     function AddGroup() { 4         // 得到选中行 5         var rows = new Array(); 6         rows = $(#dg).datagrid(getSelections); 7         if (rows[0]) {  8             var Ids = new Array(); 9             for (var i = 0;  i<rows.length; i++)10             {11                     var Id = rows[i].Id;12                     var obj=new Object;13                     obj.Id = Id;14                     Ids.push(obj);15             }16             var ids_toJson = JSON.stringify(Ids);17             $(#tt).tabs(add, {18                 title: Group Topic,19                 style: { padding: 5px },20                 content: "<iframe scrolling=‘no‘ frameborder=‘0‘ src=http://www.mamicode.com/‘/AddGroup/NewGroup?Group_Json= { \"occurdate\":\"" + $(#occurdate).datebox(getValue)21                 + "\",\"customer\":\"" +$(#customer).val()22                 + "\",\"enduser\":\"" + $(#enduser).val()23                 + "\",\"product\":\"" + $(#product).val()24                 + "\",\"activity\":\"" + $(#activity).val()25                 + "\",\"timetaken\":\"" + $(#timetaken).numberbox(getValue)26                 + "\",\"creator\":\"@ViewData["UserName"]\",\"status\":\"" + $(#status).combobox(getText)27                 + "\",\"mainbody\":\"" + $(#mainbody).val()28                 + "\",\"group_ids\":" + ids_toJson + "}"29                 + "‘ style=‘width:100%;height:99%;‘></iframe>",30                  closable: true31             });32         }33         else {34             $.messager.alert(Prompt, Please choose topics which you want to group  !, info);35             return;36         }37     });

看到JSON.stringify(Ids),关键是这个,这对于老程序员感觉很简单,但是对于新程序员无从下手时却提供了很好参考。其实就是把数组转化成了json字符串的一个过程,但是在这之前需要自己构建数组和对象。

 

我们这样可以传到后台了,但是后台如何处理呢?其实一样我们url传参用的是get方法所以后台你可以用Request.Querystring("xxx")或者Request["xxx"]直接获取到前台的传参。

后台我一开始也不知道用哪种比较好,好像不止一种方法可以把json字符串转换成json对象。

我这里引用  using Newtonsoft.Json;
         using Newtonsoft.Json.Linq;

因为之前用过一次,所以我就习惯性使用这个了。

如果大家不知道怎么用我给大家参考另一个帖子,贴过来,我也是看了这个才会的。只是简单功能而已,实现读写json。原文如下:

上一篇JSON博客JSON入门级学习小结--JSON数据结构中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的:

 

    技术分享

    

    如今因为项目需求(asp.net web网站,前台向后台传递JSON数据,并对JSON数据处理,详述见博客《 

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

 》),需要对传递的JSON数据反序列化。于是从网上找了许多JSON反序列化的例子,最终决定使用Newtonsoft.Json.dll 反序列化JSON字符串,当然它也可以序列化JSON字符串,Newtonsoft.Json.dll下载链接

 

    

    使用Newtonsoft.Json.dll反序列化JSON字符串的步骤:

    1.对Newtonsoft.Json.dll添加引用

     将Newtonsoft.Json.dll文件拷贝至界面层的Bin目录下,然后右击Bin,弹出“添加引用”页,然后点击“浏览”,然后找到界面层的Bin文件夹,找到Newtonsoft.Json.dll文件,然后点击"添加",引用添加成功!

     技术分享

    

    2.在需要对JSON字符串处理的界面,引用JSON空间,并对JSON进行处理

      网上解决办法大致如下:

     方法1:


还有一种方法是:

 

 

[csharp] viewplaincopyprint?
 
  1. //定义一个JSON字符串str    
  2. string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";    
  3.  //反序列化JSON数据  
  4. JsonReader reader = new JsonReader(new StringReader(jsonText));    
  5.   //依次读取反序列化的JSON数据  
  6.     while (reader.Read())    
  7.     {    
  8.         textBox1.Text += "TokenType = " + reader.TokenType + "   ValueType =  " + reader.ValueType + "   Value = " + reader.Value + "\r\n";    
  9.     
  10.     }    

 

 

       第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有!那好吧,第二种总行了吧,提示:

     错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例

      这是怎么回事???

     后来在搜到的文章中,发现新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:

     

[csharp] viewplaincopyprint?
 
  1. "font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray    
  2. JavaScriptConvert--->JsonConvert    
  3. JavaScriptObject--->JObject  

  其实这样更改更规范吧!

 

下面介绍新版本Newtonsoft.Json.dll反序列化JSON字符串的方法

   1.直接反序列化JSON字符串

     

[csharp] viewplaincopyprint?
 
  1. //引用序列化、反序列化JSON字符串用到的空间  
  2. using Newtonsoft.Json;    
  3. using Newtonsoft.Json.Linq;   
  4.    
  5.  //定义一个JSON字符串   
  6. string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";    
  7. //反序列化JSON字符串  
  8. JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);   
  9.  //将反序列化的JSON字符串转换成对象  
  10. JObject o = (JObject)ja[1];    
  11. //读取对象中的各项值  
  12. Console.WriteLine(o["a"]);    
  13. Console.WriteLine(ja[1]["a"]);    

 

 

   2.定义对象列表,然后反序列化JSON字符串

 

     2.1 添加一个类,定义一个对象

   

[csharp] viewplaincopyprint?
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.   
  6. ///     
  7. ///Customer 的摘要说明    
  8. ///     
  9. public class Customer  
  10. {  
  11.     //在序列化前后没有变动    
  12.     public string a  
  13.     { get; set; }  
  14.     //在序列化前后设置和重置    
  15.     public string b  
  16.     { get; set; }  
  17.     //设置为null,但在序列化后填充    
  18.     public string c  
  19.     { get; set; }  
  20.     public string Other  
  21.     { get; set; }  
  22.     public Customer()  
  23.     {  
  24.         //    
  25.         //TODO: 在此处添加构造函数逻辑    
  26.         //    
  27.         a = "";  
  28.         b = "";  
  29.         c = "";  
  30.         Other = null;  
  31.     }  
  32. }  

 

 

    2.2 反序列化JSON字符串

  

[csharp] viewplaincopyprint?
 
  1. //引用序列化、反序列化JSON字符串用到的空间  
  2. using Newtonsoft.Json;    
  3. using Newtonsoft.Json.Linq;   
  4. //定义一个JSON字符串   
  5. string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";    
  6. //反序列化JSON字符串,将JSON字符串转换成LIST列表  
  7. List _list = JsonConvert.DeserializeObject>(jsonText);    
  8. //读取列表中的值  
  9. Console.WriteLine(_list[1].a);    
  10. foreach (Customer c in _list)    
  11. {    
  12.     Console.WriteLine(c.c);    
  13. }   


   我感觉这两种反序列化JSON的方法都挺好,其实还用很多方式可以反序列化JSON,本文仅仅借助了Newtonsoft.Json.dll这个工具!

 

 

这回大家都应该有个基本了解了吧。希望能给大家些启发,共同加油!

C# Json简单处理