天天看點

C# 使用 System.Web.Script.Serialization 解析 JSON

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣。這些特性使JSON成為理想的資料交換語言。

JSON建構于兩種結構:

    1、“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被了解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表 (hash table),有鍵清單(keyed list),或者關聯數組 (associative array)。

     示例:{"UserID":11, "Name":"Froog"}; 

    2、值的有序清單(An ordered list of values)。在大部分語言中,它被了解為數組(array)。

如:

    示例:var Users=[{"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]},

             {"userID":"2","Name":"Zack","friends":["Jack","Zack","Justin"]},

             {"userID":"3","Name":"Justin","friends":["Jack","Zack","Justin"]}

這些都是常見的資料結構。事實上大部分現代計算機語言都以某種形式支援它們。這使得一種資料格式在同樣基于這些結構的程式設計語言之間交号)分隔。 

JSON具有以下這些形式:

     對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括号)開始,“}”(右括号)結束。每個“名稱”後跟一個“:”(冒号);“‘名稱/值’ 對”之間使用“,”(逗号)分隔。 

     數組是 值(value)的有序集合。一個數組以“[”(左中括号)開始,“]”(右中括号)結束。值之間使用“,”(逗号)分隔值(value)可以是雙引号括 起來的字元串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。 

     字元串(string)是由雙引号包圍的任意數量Unicode字元的集合,使用反斜線轉義。一個字元(character)即一個單獨的字元串(character string)。

NET中通過JavaScriptSerializer類操作JSON對象

示例代碼:

  1. JavaScriptSerializer json = new JavaScriptSerializer();
  2. // 反序列化JSON字元串到對象
  3. User user = json.Deserialize<User>(jsonString);
  4. // 序列化對象為JSON字元串
  5. string jsonString = json.Serialize(user);

JavaScriptSerializer 成員資訊:http://msdn.microsoft.com/zh-cn/library /system.web.script.serialization.javascriptserializer_members.aspx

AJAX 中使用JSON

  1. function getResult()
  2.           {
  3.                  $.ajax({
  4.            type: "POST",
  5.            url: "?Json=true",
  6.            data:"UserInfo="+obj.toJSONString(),
  7.            success: function(msg){
  8.                                 var obj = msg.parseJSON();
  9.                                  alert( "Name: " + obj.Name +",User:"+obj.User );
  10.                                   }
  11.          });

完整示例代碼

Default.aspx

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"Inherits="JsonWeb._Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>Untitled Page</title>
  6.     <script src="http://www.json.org/json.js" type="text/javascript"></script>
  7.     <script src="http://code.jquery.com/jquery.js" type="text/javascript"></script>
  8. <script type="text/javascript">
  9.          // "名稱/值"對的集合
  10.          var User={"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]}
  11.                  alert(User.Name);alert(User.friends[0]);
  12.          // 值的有序清單
  13.          var Users=[{"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]},
  14.          {"userID":"2","Name":"Zack","friends":["Jack","Zack","Justin"]},
  15.          {"userID":"3","Name":"Justin","friends":["Jack","Zack","Justin"]}
  16.                      ]
  17.          alert(Users[2].Name);alert(Users[2].friends.length);
  18.          alert(escape());
  19.          // 轉換JSON字元到Object
  20.          var JsonString = '{"userID":"2","Name":"Froog","friends":["Jack","Zack","Justin"]}';   
  21.          var User2 = eval('(' + JsonString + ')');
  22.          alert(User2.Name);alert(User2.friends[0]);
  23.          //引用 json.js 實作JSON字元與Object互相轉換。
  24.          var obj = JsonString.parseJSON();   
  25.          alert(obj.toJSONString());  
  26.           //AJAX 中使用JSON   
  27.           function getResult()
  28.            type: "POST",
  29.            url: "?Json=true",
  30.            success: function(msg){
  31.                                  var obj = msg.parseJSON();
  32.                                  alert( "Name: " + obj.Name +",User:"+obj.User );
  33.      //   requestHeaders: {Accept: 'application/json'} /**/,
  34.                       }
  35. </script>
  36. </head>
  37. <body>
  38.     <form id="form1" runat="server">
  39.     <div>
  40.     <input type="button" value="AJAX" onclick="getResult()" />
  41.     </div>
  42.     </form>
  43. </body>
  44. </html>
    1. using System;
    2. using System.Collections;
    3. using System.Configuration;
    4. using System.Data;
    5. using System.Linq;
    6. using System.Web;
    7. using System.Web.Security;
    8. using System.Web.UI;
    9. using System.Web.UI.HtmlControls;
    10. using System.Web.UI.WebControls;
    11. using System.Web.UI.WebControls.WebParts;
    12. using System.Xml.Linq;
    13. using System.Web.Script.Serialization;
    14. namespace JsonWeb
    15. {
    16.     public partial class _Default : System.Web.UI.Page
    17.      {
    18.         protected void Page_Load(object sender, EventArgs e)
    19.          {
    20.             if (Request.QueryString["Json"] != null)
    21.              {
    22.                 // AJAX 異步調用處理程式
    23.                 string UserInfo = Request.Form["UserInfo"] ?? string.Empty;
    24.                  JavaScriptSerializer json = new JavaScriptSerializer();
    25.                  Product product = new Product() { Name = "Computer " };
    26.                 if (!string.IsNullOrEmpty(UserInfo))
    27.                  {
    28.                     // 反序列化
    29.                      User user = json.Deserialize<User>(UserInfo);
    30.                      product.User = user.Name;
    31.                  }
    32.                 else
    33.                      product.User = "Unknow";
    34.                 // 序列化
    35.                 string jsonString = json.Serialize(product);
    36.                 // 輸出異步處理結果
    37.                  Response.ContentType = "application/json";
    38.                  Response.Write(jsonString);
    39.                  Response.End();
    40.              }
    41.          }
    42.      }
    43.      [Serializable]
    44.     public class Product
    45.         public string Name;
    46.         public string User;
    47.     public class User
    48.         public string Name { get; set; }
    49. }

繼續閱讀