/ / Консумиране на JSON данни (asmx) чрез C # страница - c #, jquery, asp.net, json, .net-3.5

Консумирайте JSON данни (asmx) чрез C # страница - c #, jquery, asp.net, json, .net-3.5

Имам код, подобен на този:

[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, уеб-услугата по-горе ще върне XML вместо JSON.

Моят въпрос е, мога ли да използвам горепосочената уеб услугав стандартна C # asp.net страница, така че мога да извлечете стойностите и да използвам стойностите, обаче искам, т.е. нещо просто като да получите webservice да върне JSON и след това да получите C # към response.write го на екрана?

Отговори:

0 за отговор № 1

По подразбиране ASMX връща SOAP, което е XML. Няма значение какво ще поискате, няма да бъде върнато.

В ASP.NET света имате по-широк набор от инструменти. Ако искате JSON (и XML?), Можете да използвате уеб API за връщане на данните. По подразбиране това е JSON, който трябва да работи тук. Има и магия в вътрешните части на ASP.NET, за да има данни за метода. Основната методология в уеб формите е AJAX, но можете да я свържете с JQuery, ако ви харесва по-добре. Всичко е в разбирането как се връща dat.

Но с ASMX, вие връщате XML под формата наSOAP. Виждал съм някой (преди години) да поеме вътрешността малко в уеб услугите и да върне JSON. Това беше голям клъдж. Той работеше, но не бих посъветвал това, когато има няколко начина за решаването му, без да се изключва вътрешността на ASP.NET.

Ще започна тук: http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/

Това е просто обяснение как да се използва JSON с JQuery в ASP.NET.


0 за отговор № 2

Можете да направите следното на сървърната страна

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

Имайте предвид, че това наистина не е целта на уеб услугите.

В aspx файл бихте искали:

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

0 за отговор № 3

Със сигурност можете да консумирате уеб услуга чрез.aspx page - най-лесният начин да направя това е да използвам обекта WebClient в пространството на имената на System.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.Json DLL, която можете да изтеглите от Nuget - това е може би най-популярната библиотекасериализиране и де-serializng json в. NET. Ако приемете, че уеб услугата ви връща STRING (наистина не искате да използвате родните .NET типове данни в JSON-базирани уеб услуги), горният пример ще десериализира резултатите в .NET таблица с данни на вашата .aspx страница. правите това, на вашия въпрос, просто цикъл чрез таблицата с данни и Response.Write го на екрана (можете да напишете суров json само от Response.Write (responseStr)).

Надявам се това да помогне! - JM