快速业务通道

基于ASP.NET 3.5 Web Service的JSON扩展应用

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
; serializer.WriteObject(ms, SerializationTarget); string Product = Encoding.Default.GetString(ms.ToArray()); ms.Close(); return Product; } private object JSONDeserialize(string DeserializationTarget, Type TargetType) { MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(DeserializationTarget)); DataContractJsonSerializer serializer = new DataContractJsonSerializer(TargetType); object Product = serializer.ReadObject(ms); ms.Close(); return Product; }

您需要使用的System.Runtime.Serialization.Json名字空间,这将需要提及 System.Runtime.Serialization , System.ServiceModel ,和System.ServiceModel.Web 。

最后,我们只需要在InterceptJSONMethodRequest功能完成待办事项。代码如下:

…
    else
    {
        Type Service = this.GetType();
        MethodInfo JSONMethod = Service.GetMethod(ServiceMethodName);
        if (JSONMethod == null) return;
        ParameterInfo[] JSONMethodParameters = JSONMethod.GetParameters();
        object[] CallParameters = new object[JSONMethodParameters.Length];
        for (int i = 0; i < JSONMethodParameters.Length; i++)
        {
            ParameterInfo TargetParameter = JSONMethodParameters[i];
            string RawParameter = Context.Request.Form[TargetParameter.Name];
            if (RawParameter == null || RawParameter == "")
                RawParameter = Context.Request.QueryString[TargetParameter.Name];
            if (RawParameter == null || RawParameter == "")
                throw new Exception("Missing parameter " + TargetParameter.Name + 

".");
            CallParameters[i] = JSONDeserialize(RawParameter, 

TargetParameter.ParameterType);
        }
        object JSONMethodReturnValue = JSONMethod.Invoke(this, CallParameters);
        string SerializedReturnValue = JSONSerialize(JSONMethodReturnValue);
        Context.Response.Write(SerializedReturnValue);
    }
…

我们目前的Web服务类类型,该类型的“this”不是指的EnhanceWebService,但实际的Web服务类将在 以后的时间创建,其中将有各种Web方法。然后,我们开始获取信息的方法被调用,如果不存在将发生错 误便退出而终止响应,从而使ASP.NET Web服务处理程序继续进行。从方法的信息,我们将通过迭代获得 其参数列表。

对于每个参数,我们期待双方的QueryString和form收集具有相同名称的的变量。我们可以通过两种方 式检查这两个参数:如果没有变量存在到某一特定的参数,那么这个参数是没有提供的,我们抛出一个异 常,在这里只是一个服务器端异常;否则,我们将其值化的对象,以后在储存。一并行化所有参数,我们 使用目标的方法和获得返回值。

当然,在这一点上,所有需要做的是连续的返回值,并完成相应。

这是全部的EnhancedWebService 类。现在,您可以解释任何Web方法的JSON同一条直线上,例如:

public class MyService : EnhancedWebService
{
    public MyService () {
    }
    [JSONMethod]
    [WebMethod]
    public string[] MethodThatSupportsJSON(string Parameter)
    {
        return new string[] { Parameter, Parameter, Parameter };
    }
    [WebMethod]
    public string[] MethodThatDoesNotSupportJSON(st

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号