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


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

    新一篇: ExtJs Ajax的WCF服务 之 Ext.grid 控件显示 | 旧一篇: Extjs 数据读取对象ArrayReader/JsonReader/XmlReader

    今天我们来探讨一下关于 使用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);
            }

        }

    }

  • 相关阅读:
    前后端微服务联调
    Rancher搭建ES容器集群
    Rancher解决磁盘占满异常
    Rancher搭建Redis主从集群
    Rancher搭建NFS持久存储
    Linux普通用户管理
    Rancher部署mysql8
    Delegate背后的秘密
    Java——反射
    redis 操作命令
  • 原文地址:https://www.cnblogs.com/winner/p/1244677.html
Copyright © 2020-2023  润新知