ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?

Posted

技术标签:

【中文标题】ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?【英文标题】:ASP.NET - What is the correct approach to JSON based web services with jQuery?ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是什么? 【发布时间】:2010-09-21 21:51:32 【问题描述】:

将基于 ASP.NET SOAP 的 Web 服务转换为基于 JSON 的响应的正确方法是什么? ...然后从 jQuery 调用这些?

在集成基于 jQuery 的 AJAX 和 ASP.NET 时,什么是“最佳实践”? 文章?书籍?

【问题讨论】:

【参考方案1】:

可以使用 System.Runtime.SerializationSystem.Runtime.Serialization.JSON 将 JSON 转换为 .NET 类。我怀疑您对设置从客户端到服务器的函数调用更感兴趣。我认为值得一试this tutorial。

在本教程中,您需要添加一个网络服务“.asmx”文件。在 asmx 文件中,您将能够创建可从客户端脚本调用的函数。您的 ASP.NET 页面还可以引用生成的客户端脚本来调用 .asmx 函数。

如果你真的想进行 JSON 序列化,你也可以使用以下方法:

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

public class JsonSerializer

    // To make a type serializeable, mark it with DataContractAttribute
    // To make a member of such types serializeable, mark them with DataMemberAttribute
    // All types marked for serialization then need to be passed to JsonSerialize as
    // parameter 'types'

    static public string JsonSerialize(object objectToSerialize, params Type[] types)
    
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(
            types[0], types.Skip(1));

        MemoryStream ms = new MemoryStream();
        serializer.WriteObject(ms, objectToSerialize);
        ms.Seek(0, SeekOrigin.Begin);
        StreamReader sr = new StreamReader(ms);
        return sr.ReadToEnd();
    

【讨论】:

【参考方案2】:

Bobby Soares 在 codproject.com 上的以下文章 Extending an existing ASP.NET Web Service to support JSON 讨论了使用自定义方法属性来实现所需的结果。

【讨论】:

Bobby Saores 的文章看起来很完美。我很想尝试实现它,因为它看起来会支持我的项目。【参考方案3】:

我使用 ASP.Net Ajax 有一段时间了,但从未担心过 JSON 或 XML 通信。相反,我使用 Web 服务直接返回您可以使用 innerhtml 设置的内容。

这很容易实现。只需创建一个 Web 服务 (ASMX) 文件,并将您的方法声明为 WebMethods(设置 WebMethod 属性)。

现在您可以像使用常规函数一样从 javascript 代码调用您的网络服务。

函数的结果将返回给回调函数。这是结构

//Webmethod returns some HTML content
Myservice.DoSomething(myParam, callBackFunction);

//Content is set on the webpage
function callBackFunction(result)
  document.getElementById('myElemID').innerHTML = result;

【讨论】:

如果您需要通过网络传递 html 而不是轻量级 json 对象,为什么不直接使用更新面板呢? json 的想法是将 k 保持在最低限度,从而具有快速的带外响应

以上是关于ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET中JQuery+AJAX调用后台

ASP.NET MVC使用jQuery实现Autocomplete

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库!

使用 CSS 和 jQuery 的 asp.net siteMap 菜单

使用 ASP.Net 和 JSON 格式实现 jQuery 的 jgGrid