通过c#页面使用JSON数据(asmx)

本文关键字:数据 asmx JSON 通过 | 更新日期: 2023-09-27 18:03:14

我有类似这样的代码:

[ScriptService]
public class Titles : WebService
{
    List<Title> Title = new List<Title>();
    SqlConnection connection;
    SqlCommand command;
    SqlDataReader reader;
    [WebMethod()]
    public List<Title> GetTitle()
    {
        var title = new List<Title>();
        using (connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
        {
            using (command = new SqlCommand("some query here", connection))
            {
                connection.Open();
                using (reader = command.ExecuteReader())
                {
                    int col1Index = reader.GetOrdinal("col1");
                    while (reader.Read())
                    {
                        title.Add(new Title(reader.GetString(col1Index)));
                    }
                }
            }
        }
        return title;
    }
}

我可以使用jQuery让上面的代码返回XML或JSON,例如:

$.ajax({
    url: '/webservices/titles.asmx/GetTitle',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',

通过将jQuery的dataType和contentType更改为XML,上面的webservice将返回XML而不是JSON。

我的问题是,我可以在标准的c# asp.net页面中使用上述web服务,这样我就可以提取值并使用我想要的值,即简单的东西,如获取web服务返回JSON,然后获得c#响应。写在屏幕上?

通过c#页面使用JSON数据(asmx)

默认情况下,ASMX返回SOAP,即XML。不管你要求什么,它都不会被返回。

在ASP。NET世界中,你有一个更广泛的工具箱。如果需要JSON(和XML?),可以使用Web API返回数据。默认情况下,它是JSON,在这里应该可以工作。ASP中也有一些神奇之处。NET内部有一个返回数据的方法。web表单的核心方法是AJAX,但是如果你喜欢的话,你也可以使用JQuery。这一切都是为了理解数据是如何返回的。

但是,使用ASMX,您返回SOAP形式的XML。几年前,我看到有人接管了web服务的内部部分,并返回JSON。这是一个重大的拼凑。它是有效的,但我不建议这样做,因为有很多方法可以解决这个问题,而不需要拼凑ASP.NET的内部。

我会从这里开始:http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/

这是一个如何在ASP.NET中使用JQuery使用JSON的简单解释。

您可以在服务器端执行以下操作

var results = (new Titles()).GetTitle();
// do stuff with results. 

请记住,这不是web服务的真正目的。

在aspx文件中,这就像:

<%  var results = (new Titles()).GetTitle(); 
 foreach(var r in results){%>
       <div><!-- do stuff with each item in results --></div>
 <% }%>

你当然可以通过.aspx页面来使用web服务——我所能做到的最简单的方法是在系统中使用WebClient对象。. Net名称空间通过如下代码:

        WebClient serviceRequest = new WebClient();
        string responseStr = "";
        responseStr = serviceRequest.DownloadString(new Uri("http://www.yourwebserver.com/yourwebservices/YourService.svc/json/getwhateverdatayouneed/" + passInAParameter));
        //I'm not really sure if these next 3 lines are needed, but to deserialize into a Data Table I had to do this string manipulation
        responseStr = responseStr.Replace("''", "");
        responseStr = responseStr.Replace("'"[", "[");
        responseStr = responseStr.Replace("]'"", "]");
        DataTable dtMyDataFromService = JsonConvert.DeserializeObject<DataTable>(responseStr);

这个例子也使用了Newtonsoft。你可以从Nuget下载它——这可能是。net中最流行的序列化和反序列化Json的库。假设您的web服务返回一个STRING(您确实不想在基于json的web服务中使用本机。net数据类型),上面的代码示例将把结果反序列化到。aspx页面上的。net数据表中。这样做之后,根据您的问题,只需循环遍历数据表和Response。将其写入屏幕(您也可以通过Response.Write(responseStr)编写原始json)。

希望这对你有帮助!- - - - - - JM