ASP.NET利用JQuery中的Aajax实现JSON数据后台交互

     JSON简单介绍:

     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.

  简单 JSON 示例

  按照最简单的形式,可以用下面这样的 JSON 表示名称 / 值对:

 

  { "firstName": "Brett" }

     本人使用的是Newtonsoft.Json类库。

   后台代码:

 public static class JsonHelper<T, K>
    {
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public static string JsonWriter(T t)
        {
            return JsonConvert.SerializeObject(t,new IsoDateTimeConverter());
        }
       /// <summary>
        /// 反序列化
       /// </summary>
       /// <param name="serialize"></param>
       /// <returns></returns>
        public static T JsonReader(string serialize)
        {
            return JsonConvert.DeserializeObject<T>(serialize);
        }
        /// <summary>
        /// 将DataTable转化成JSON格式
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string JsonDataTable(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.Append("{\"");
            jsonBuilder.Append(dt.TableName.ToString());
            jsonBuilder.Append("\":[");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("\"");
                    jsonBuilder.Append(dt.Columns[j].ColumnName);
                    jsonBuilder.Append("\":\"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("\",");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("},");
            }
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            jsonBuilder.Append("]");
            jsonBuilder.Append("}");
            return jsonBuilder.ToString();
        }
    }

一般应用程序:

 public void ProcessRequest(HttpContext context)
    {
        string index= context.Request.QueryString["p"].ToString();
        if (null != index)
        {
            context.Response.Write(List(int.Parse(index)));
            context.Response.ContentType = "json/json";//设置写出的是JSON格式文件

        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    private string List(int id)
    {
        C_USER user = new C_USERService().GetById(id);
        string json =JsonHelper<C_USER, int>.JsonWriter(user);
        return json;
    }   

页面调用:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>

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

<head runat="server">
    <title>Json测试</title>

    <script language="javascript" type="text/javascript" src="script/jquery-1.4.2.min.js"></script>

    <script language="javascript" type="text/javascript">
 $(document).ready(function(){
     $.ajax({
        url:"Handler.ashx?p=1",
        //dataType:"json",
        type:"post",
        success:function(json)
                {
                 alert(json.NAME);    //NAME是实体类中的一个属性                   
                }
     });
 });
</script>

</head>
<body>
    <form id="form1">
        </form>
</body>
</html>

结束:

问题的一些总结:

1、用Newtonsoft.Json类库3.5的版本的时候运行出异常System.Runtime..........的异常,问题是安装的Framework3.5版本是sp1.0的不存在那个方法,建议升级下或者用Newtonsoft.Json类库2.0版本

2、当json文件写出后一直没发用,解决方法:在一般应用程序里+  context.Response.ContentType = "json/json";//设置写出的是JSON格式文件或者在Ajax那里+   dataType:"json",写出的是json格式。

3、如果用get请求会出现URL缓存(点击第一次的时候可以第二次就不管用)解决方案:1、改用post请求或者设置一个参数(参数采用系统时间的秒)如:

var date =new Date();

var nocache=date.getSeconds();

Ajax中使用范例: url:"Handler.ashx?p=1&nocache="+nocache,

文章如果有不明之处可以留言,谢谢。

完。

posted @ 2011-03-30 17:16  爱情小鱼  阅读(1527)  评论(0编辑  收藏  举报