天天看點

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='/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: true
31             });
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字元串數組資料樣式大概是這樣子的:

C# 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檔案,然後點選"添加",引用添加成功!

C# Json簡單處理

    2.在需要對JSON字元串處理的界面,引用JSON空間,并對JSON進行處理

      網上解決辦法大緻如下:

     方法1:

還有一種方法是:

[csharp]
    
   ​​view plain​​​
   ​​​copy​​​
   ​​​print​​​
   ​​​?​​ 
   
 
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]
    
   ​​view plain​​​
   ​​​copy​​​
   ​​​print​​​
   ​​​?​​ 

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

   其實這樣更改更規範吧!

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

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

[csharp]
    
   ​​view plain​​​
   ​​​copy​​​
   ​​​print​​​
   ​​​?​​ 
 
1. //引用序列化、反序列化JSON字元串用到的空間
2. usingNewtonsoft.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]
    
   ​​view plain​​​
   ​​​copy​​​
   ​​​print​​​
   ​​​?​​ 
   
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]
    
   ​​view plain​​​
   ​​​copy​​​
   ​​​print​​​
   ​​​?​​ 
    
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這個工具!