ExtJs WebService Json序列化(扩展JavaScriptSerializer类)

今天我们来探讨一下关于 使用JavaScriptSerializer的Serialize方法进行Json序列化.

在这里我们要用到反射,所以,对于反射也可以顺便学习一下.

注意,我这里是用Vs2008来编写的,所以Vs2008以前的版本,需要读者自己相应的改一下,~_~!

首先我们创建一个webapplication工程,

添加一个WebService.htm文件,

页面代码如下:

<! 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 >
    
< title > 无标题页 </ title >
    
< script  src ="ExtJs/ext-base.js"  type ="text/javascript" ></ script >
    
< script  src ="ExtJs/ext-all.js"  type ="text/javascript" ></ script >
</ head >
< body >
    
< input  id ="Button1"  onclick ="getValue();"  type ="button"  value ="返回"   />    
    
< textarea  id ="log"  cols ="40"  rows ="10" ></ textarea >
    
    
< script  type ="text/javascript" >
    
<!--
    
function getValue()
    
{
        Ext.Ajax.request(
        
{
            method:
"post",
            url:
"test.asmx/GetData",
            success:ExtSuccess,
            headers:
{'Content-Type':'application/json;utf-8'}//在这里一定要指定头信息为json,否则将返回的是XML,而不是Json
        }

        )
    }
    
    
function ExtSuccess(result,request)
    
{
        
var textArea = Ext.get('log').dom;                
                textArea.value 
+= result.responseText + " ";
                
//Ext.MessageBox.alert('Success', 'Data return from the server: '+ result.responseText);         
                doJSON(result.responseText);
    }

    
    
    
function doJSON(stringData) {    
        
try {
            
//这里可能麻烦一点,需要将返回的数据进行两次Json序列化
            //第二次转化的对象是stringData.d, d是ExtJs内部定义的属性
            var jsonData = Ext.util.JSON.decode(stringData);            
            jsonData 
= Ext.util.JSON.decode(jsonData.d);            
            
for(var i in jsonData)
            
{
                alert(i
+":"+jsonData[i]);
            }
            
        }

        
catch (err) {
        }

    }


    
//-->    
    
</ script >
</ body >
</ html >

 

然后我们加入要引用的ext-base.js和ext-all.js两个ExtJs文件,这两个文件需要读者到www.extjs.com去下载.

接下来我们创建一个test.asmx文件,代码如下:

 

using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Services;
using  System.Web.Services.Protocols;
using  System.Xml.Linq;
using  System.Web.Script.Services;
using  System.Collections.Generic;
using  System.ServiceModel.Web;
using  System.ServiceModel.Dispatcher;
using  Component;
namespace  WebApplication1
{
    
/// <summary>
    
/// test 的摘要说明
    
/// </summary>

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    [ToolboxItem(
false)]
    
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    public class test : System.Web.Services.WebService
    
{
        [WebMethod]        
        
public string GetData()
        
{
            var obj 
= new { obj = new[] new { name = "a", id = 1 }new { name = "b", id = 2 } } };
            Dictionary
<stringobject> dic = new Dictionary<stringobject>();
            dic.Add(
"p1",1);
            dic.Add(
"p2",2);        
            
return obj.toJson(new { p1 = 1 }new { p2 = 2 });
        }

        
    }

}

接下来创建一个ExtendMethod.cs文件,存放Json序列化的扩展方法

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Web.Script.Serialization;
using  System.Collections;
using  System.Reflection;
namespace  Component
{
    
public static class ExtendMethod
    
{
        
/// <summary>
        
/// 返回Json序列
        
/// parms字典
        
/// Key:Json对象名
        
/// Value:Json对象值
        
/// </summary>
        
/// <param name="This"></param>
        
/// <param name="parms">需要加入的对象</param>
        
/// <returns></returns>

        public static string toJson(this object This,Dictionary<string,object> parms)
        
{
            JavaScriptSerializer json 
= new JavaScriptSerializer();
            var ds 
= new { source=This};
            

            Dictionary
<object,object> dic = new Dictionary<object,object>();
            dic.Add(
"source",This);

            
foreach (KeyValuePair<stringobject> key in parms)
            
{
                dic.Add(key.Key,key.Value);
            }
            
            
return json.Serialize(dic);
        }


        
/// <summary>
        
/// 返回Json序列
        
/// parms:加入的对象将与this对象同级
        
/// 未完成
        
/// </summary>
        
/// <param name="This"></param>
        
/// <param name="parms">需要加入的对象</param>
        
/// <returns></returns>

        public static string toJson(this object This, params object[] parms)
        
{
            JavaScriptSerializer json 
= new JavaScriptSerializer();
            Dictionary
<stringobject> dic = new Dictionary<stringobject>();
            dic.Add(
"source", This);
            
foreach (object i in parms)
            
{
                Type t 
= i.GetType();
                PropertyInfo[] myproperties 
= t.GetProperties();
                dic.Add(myproperties[
0].Name, myproperties[0].GetValue(i, null));
            }


            
return json.Serialize(dic);
        }

    }

}

以上就是全部的代码,至于其用法在注释中已写清楚了.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值