通过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#响应。写在屏幕上?
默认情况下,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