[转]C# JSON序列化 返序列化 使用System.Web.Script.Serialization 解析

原文:http://hi.baidu.com/mybblog/item/ad0633fa7bdd20c70dd1c884

C# JSON序列化 返序列化 使用System.Web.Script.Serialization 解析

 using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.Script.Serialization;

public partial class test2 : System.Web.UI.Page
{
    private class test1
    {
        public int x;
        public int y;
    }

    private class test
    {
        public string x;
        public test1[] m;
        public int n;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        //Response.Write(Request.Form["t"].Length);
        string inputString = "{x:\"test\",n:20,m:[{x:12,y:23},{x:22,y:33},{x:33,y:44}]}";
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        test test1 = serializer.Deserialize<test>(inputString);

    }
}
 

 

解释

   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对象
示例代码:

JavaScriptSerializer json = new JavaScriptSerializer();// 反序列化JSON字符串到对象User user = json.Deserialize<User>(jsonString);// 序列化对象为JSON字符串string jsonString = json.Serialize(user);

JavaScriptSerializer 成员信息:http://msdn.microsoft.com/zh-cn/library /system.web.script.serialization.javascriptserializer_members.aspx

AJAX 中使用JSON

示例代码:

function getResult()         {                $.ajax({          type: "POST",          url: "?Json=true",           data:"UserInfo="+obj.toJSONString(),          success: function(msg){                                var obj = msg.parseJSON();                                alert( "Name: " + obj.Name +",User:"+obj.User );                                 }        });


完整示例代码


 

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="JsonWeb._Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

    <script src="http://www.json.org/json.js" type="text/javascript"></script>

    <script src="http://code.jquery.com/jquery.js" type="text/javascript"></script>

 <script type="text/javascript">

        // "名称/值"对的集合

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

                alert(User.Name);alert(User.friends[0]);

        

        // 值的有序列表

        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"]}

                    ]

        alert(Users[2].Name);alert(Users[2].friends.length);

        alert(escape());

        

        // 转换JSON字符到Object

        var JsonString = '{"userID":"2","Name":"Froog","friends":["Jack","Zack","Justin"]}';   

        var User2 = eval('(' + JsonString + ')'); 

        alert(User2.Name);alert(User2.friends[0]);

        

        //引用 json.js 实现JSON字符与Object相互转换。

        var obj = JsonString.parseJSON();   

        alert(obj.toJSONString());  

        

         //AJAX 中使用JSON   

         function getResult()

         {

                $.ajax({

          type: "POST",

          url: "?Json=true", 

          data:"UserInfo="+obj.toJSONString(),

          success: function(msg){

                                var obj = msg.parseJSON();

                                alert( "Name: " + obj.Name +",User:"+obj.User );

                                 }

        });

 

    //  requestHeaders: {Accept: 'application/json'} /**/,

                     }

 

 </script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <input type="button" value="AJAX" onclick="getResult()" />

    </div>

    </form>

</body>

</html>

 

Default.aspx.cs 

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Web.Script.Serialization;

 

namespace JsonWeb

{

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            if (Request.QueryString["Json"] != null)

            {

                // AJAX 异步调用处理程序

                string UserInfo = Request.Form["UserInfo"] ?? string.Empty;

 

                JavaScriptSerializer json = new JavaScriptSerializer();

                Product product = new Product() { Name = "Computer " };

 

                if (!string.IsNullOrEmpty(UserInfo))

                {

                    // 反序列化

                    User user = json.Deserialize<User>(UserInfo);

                    product.User = user.Name;

                }

                else

                {

                    product.User = "Unknow";

                }

                // 序列化

                string jsonString = json.Serialize(product);

 

                // 输出异步处理结果

                Response.ContentType = "application/json";

                Response.Write(jsonString);

                Response.End();

            }

        }

    }

    [Serializable]

    public class Product

    {

        public string Name;

        public string User;

    }

    public class User

    {

        public string Name { get; set; }

    }

}

 
posted @ 2013-03-04 18:44  chutianshu_1981  阅读(682)  评论(0编辑  收藏  举报